搭建环境:
Server name | IP |
---|---|
mysql1 | 192.168.200.1 |
mysql2 | 192.168.200.2 |
服务器版本: CentOS Linux release 7.5.1804 (Core)
MySQL 版本: 8.0.12 # 采用源码安装方式, 此过程略, 或者参考 http://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;
注意事项:
两个数据库的数据在初始状态必须保持一致, 这样才能保证 show master status; 的时候输出的结果才一致;
show slave status \G; 的时候. Slave_IO_Running 和 Slave_SQL_Running 的结果为 YES;
数据库的配置文件:/etc/my.cnf 中的 server-id 的值必须不一样;
两台服务器中的数据库版本必须一样;
来源: http://www.bubuko.com/infodetail-2803469.html