Linux环境下MySQL主从同步环境部署
linux环境下MySQL主从同步部署
一、MySQL主从复制集群至少需要2台数据库服务器,其中一台是master、另外一台slave库,MySQL主从数据同步是一个异步复制的过程。 首先在master上开启bin-log日志功能,bin-log日志用于记录在master库中执行的增删改查与更新操作sql语句。整个过程需要开启3个线程,分别是: 1、master开启I/O线程; 2、slave开启I/O线程; 3、SQL线程。 二、MySQL主从同步原理: 1、slave上执行slave start,slave I/0线程会通过在master创建的授权用户连接上至master,并请求master从指定的文件和位置之后发送bin-log日志内容; 2、master接收来自slave I/0线程的请求后,master I/0线程根据slave发送的指定bin-log日志和positiion点之后内容,然后返回给slave的I/0线程; 3、返回的信息中除了bin-log日志内容外,还有master最新的bin-log文件名以及在bin-log中的下一个指定更新position点; 4、slave I/0线程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log最末端,并将读取到master端的bin-log的文件名和position点记录到master.info文件中,以便下一次读取能告知master从相应的bin-log文件及最后一个position点开始发起请求; 5、slave SQL线程检测到relay-log中内容有更新,会立刻解析relay-log日志中的内容,将解析后的SQL语句在slave里执行,执行成功后slave库与master库数据保持一致。 三、主从复制实战 本次项目部署MySQL主从复制环境构建2台服务器,配置1主1从。
1、系统环境: 2、主从部署 (1)修改2个节点hosts文件(注意2台节点都需要配置) 192.168.198.128 node01 192.168.198.131 node02 测试: (2)修改MySQL配置文件 默认情况下MySQL的配置文件是/etc/my.cnf,首先修改node01主机文件,具体如下:
server-id = 1 :节点标识,主、从节点不能相同,且全局唯一; log-bin = mysql-bin:表示开启MySQL的binlog日志功能; 会生成文件名为: mysql-bin. 000001; relay-log = mysql-relay-bin :用来定义relay-log日志文件的命名格式;replicate-wild-ignore-table = mysql.% replicate-wild-ignore-table = test.% replicate-wild-ignore-table = information_schema.%
以上三条中,replicate-wild-ignore-table :是复制过滤选项,可以过滤掉不需要复制的数据库或表。eg: mysql.%表示不复制MySQL库下的所有对象。 (3)修改node02主机的配置文件:server-id = 2
log-bin=mysql-bin relay-log = mysql-relay-bin replicate-wild-ignore-table=mysql.&replicate-wild-ignore-table=test.& replicate-wild-ignore-table=information_schema.&
(4)创建复制用户并授权 1)在node01上MySQL库中创建、复制用户 2)然后在node02的MySQL库中将node01设为自己的主服务器:
mysql> use mysql ; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -ADatabase changed mysql> change master to -> master_host=192.168.198.128, ->master_user=repl_user , ->master_password=Ccu2020@, -> master_log_file= mysql-bin. 000003, ->master_log_pos=559 ;
3)在node02上启动slave服务: 4)上面是将node01到node02的MySQL主从复制已经完成。接下来开始配置从node02到node01的MySQL复制。 在node02上MySQL库中创建复制用户:
mysql>use mysq l; Database changed mysql> grant replication slave on *.* to repl_user@192.168.198.128identified byCcu2020@; Query OK,0 rows affected (0.01 sec) mysql> show master status;
6)然后在node01的MySQL库将node02设为自己的主服务器:
mysql> change master to -> master_host=192.168.198.131, -> master_user=repl_user , -> master_password=Ccu2020@, -> master_log_file=mysql-bin.000003 , ->master_log_pos=337; Query OK,0 rows affected,2 warnings (0.01 sec)
7)最后,在node01上启动Slave服务:
mysql> start slave; Query OK,0 rows affected (0.01 sec)
8)在node01查看Slave运行状态:
mysql> show slave statusG;