一、准备
1、两个数据库版本最好保持一致(因为官方就是这么建议的,主要的问题就是考虑到兼容性问题)
2、连个数据库的数据保持一致,若不一致,可手动调整,比如A比B多一个库,那就将这个库导入到B库,达到一致
A数据库:182.92.172.80
B数据库:123.57.44.85
二、操作
A数据库
1、开启binlog
[mysqld] log-bin=mysql-bin #开启二进制日志 server-id=1 #设置server-id,不能一样
2、重启mysql,创建同于同步的用户账号
systemctl restart mysql
登陆数据库
mysql -u root -p
创建用户并授权:用户:test,密码:123456,ip:B主机的ip
create user 'test'@'123.57.44.85' identified by '123456';
分配权限
grant replication slave on *.* to 'test'@'123.57.44.85'; flush privileges;
锁表,禁止写入,当前窗口不能退出,这时候开启另一个终端继续操作
flush table with read lock;
3、新窗口操作,查看master状态,记录二进制文件名和位置
show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 1042 | | | +------------------+----------+--------------+------------------+
4、将当前数据库导出,如果两个数据库不一致,手动调整
mysqldump -u root -p --all-databases > alldb.sql
5、解锁查看binlog日志位置,如果没变化证明锁定成功。从库将从这个binlog日志开始恢复
unlock tables;
show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 1042 | | | +------------------+----------+--------------+------------------+
B数据库操作
1、导入数据
mysql -u root -p < alldb.sql
2、修改配置文件
[mysqld] log-bin=mysql-bin #开启二进制日志 server-id=2 #设置server-id,必须唯一
3、重启mysql,配置同步
systemctl restart mysql
需要A服务器主机名,登陆凭证,二进制文件名称和位置
change master to master_host='182.92.172.80', -> master_user='test', -> master_password='123456', -> master_log_file='mysql-bin.000003', -> master_log_pos=1024; #master_log_pos位置最好在 mysql-bin.000003里面找,用下面这个命令 #mysqlbinlog mysql-bin.000003 > test.txt
4、开启slave,查看slave状态
start slave; show slave statusG;
5、配置作为A的主
创建用户并授权:用户:test,密码:123456,ip:A主机的ip
create user 'test'@'182.92.172.80' identified by '123456';
分配权限
grant replication slave on *.* to 'test'@'182.92.172.80'; flush privileges;
这次不用锁表了,因为B在同步A数据的时候,已经一致了。
6、新窗口操作,查看master状态,记录二进制文件名和位置
show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 1042 | | | +------------------+----------+--------------+------------------+
A数据库操作
1、需要B服务器主机名,登陆凭证,二进制文件名和位置
change master to master_host='123.57.44.85', -> master_user='test', -> master_password='123456', -> master_log_file='mysql-bin.000003', -> master_log_pos=1024; #master_log_pos位置最好在 mysql-bin.000003里面找,用下面这个命令 #mysqlbinlog mysql-bin.000003 > test.txt
2、开启查看slave状态
start slave; show slave statusG;