实战MYSQL 8.0.12 主主复制配置过程

搭建环境:

Server name IP
mysql1 192.168.200.1
mysql2 192.168.200.2

服务器版本:CentOS Linux release 7.5.1804 (Core)
MYSQL版本:8.0.12 # 采用源码安装方式, 此过程略,或者参考 https://blog.51cto.com/snowlai/2140451

由于MYSQL采用的是源码安装方式,没有生成 /etc/my.cnf 文件,需要手动创建,创建内容如下:

vim /etc/my.cnf # mysql1里的内容,mysql2的内容区别是server-id = 2 就可以,其它一样;

[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server-id = 1
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.%
symbolic-links=0
log-error=/usr/local/mysql/data/mysql1.err
pid-file=/usr/local/mysql/data/mysql1.pid

进入mysql1的数据库

mysql -uroot -p #输入数据库的密码
mysql> flush table with read lock;

锁住数据库的写操作后,不要退出这个终端,复制一个终端,将/usr/local/mysql/data 压缩打包,然后再scp到mysql2上。

tar zcvf data.tar.gz data
scp data.tar.gz root@mysql2:/usr/local/mysql/

然后再mysql2上解压data.tar.gz, 并删除 auto.cnf文件

tar zxvf data.tar.gz
rm -rf auto.cnf

都重启mysqld服务

service mysqld restart


mysql1: MASTER ; mysql2:SLAVE

在mysql1上创建复制用户(repl_user),并授权

grant replication slave on . to 'repl_user'@'mysql2' identified by 'REPL_PASSWORD';
show master status;

并记录master的输出:File和Position的值

登录到mysql2上,设置mysql1为自己的主服务器

change master to master_host='mysql1',master_user='repl_user',master_password='REPL_PASSWORD',master_log_file='mysql1上File的值',master_log_pos=mysql1上的position值;
start slave;
show slave status \G;


mysql2: MASTER ; mysql1:SLAVE
在mysql2上创建复制用户(repl_user),并授权
grant replication slave on . to 'repl_user'@'mysql1' identified by 'REPL_PASSWORD';
show master status;

并记录master的输出:File和Position的值

登录到mysql1上,设置mysql2为自己的主服务器

change master to master_host='mysql2',master_user='repl_user',master_password='REPL_PASSWORD',master_log_file='mysql2上File的值',master_log_pos=mysql2上的position值;
start slave;
show slave status \G;


注意事项:

  1. 两个数据库的数据在初始状态必须保持一致, 这样才能保证 show master status;的时候输出的结果才一致;
  2. show slave status \G; 的时候。 Slave_IO_Running 和 Slave_SQL_Running 的结果为YES;
  3. 数据库的配置文件:/etc/my.cnf 中的server-id的值必须不一样;
  4. 两台服务器中的数据库版本必须一样;