1、下载mysql
master安装在windows上,msi安装版官网链接:https://dev.mysql.com/downloads/windows/installer/
windows下安装步骤:https://jingyan.baidu.com/article/90bc8fc8615c99f653640cc4.html
slave安装在VMware的centos7上,参考:https://blog.csdn.net/vipbupafeng/article/details/80271089
2、master配置
# master服务唯一标识
server-id = 1
# 二进制同步数据文件
log-bin = mysql-bin
basedir = E:/Program Files/MySQL/MySQL Server 5.7/
datadir = E:/ProgramData/MySQL/MySQL Server 5.7/Data/
binlog-do-db = test
# binlog-do-db和binlog-ignore-db只需指定一个
# binlog-ignore-db=mysql
配置完,计算器管理服务中重启mysql
使用navicat或sqlyog连接mysql,新建一个用户专用于slave连接:
create user 'slave'@'192.168.229.129' identified by '123456';
192.168.229.129是centos的ip,表示只有该客户端可以使用slave进行连接;
然后给slave主从同步操作授权:
grant replication slave on *.* to 'slave'@'192.168.229.129' identified by '123456';
flush privileges;
测试的话可直接用root用户,跳过用户创建,直接授权:
grant replication slave on *.* to 'root'@'%' identified by 'root';
flush privileges;
%表示任何客户端都可以用root用户连接。
查看master状态信息:show master status;
记录File和Position
3、slave配置
编辑:vi /etc/my.cnf
[mysqld]节点下添加:
# slave服务的唯一标识,2至32,保证和master不一样
server-id=2
# 指定要同步的数据库,replicate-do-db和replicate-ignore-db二选一
replicate-do-db=test
# 指定不要同步的数据库
# replicate-ignore-db=mysql
重启slave:service mysql restart
注意关闭防火墙或开放3306端口
登录slave配置同步master信息:
change master to master_host="127.0.0.1",
master_user="root",
master_password="root",
master_port=3306,
master_log_file="mysql-bin.000002",
master_log_pos=154;
master_log_file和master_log_pos是在master中用show master status;查看的信息
开启同步:start slave;
查看同步状态:show slave status;(linux终端:show slave status \G)
图中IO和SQL都是Yes表示同步状态正常
4、测试
在两个服务器中分别创建test数据库,在mater的test上新建一个表girl,slave中自动增加一个相同的表girl,
master上往girl中插入更新删除数据,slave中同步进行
5、其他
①、查看同步状态时,如果IO和SQL有一个为No,说明同步异常,可以到/usr/local/mysql/data/bogon.err中查看错误日志信息,没有可以my.cng中指定:/usr/local/mysql/data/bogon.err,重启,根据错误日志解决后重新设置slave同步信息,start slave即可
②、建议:主从服务器同步的两个库名和表名保持一致,否则需要设置replicate-rewrite-db和replicate-wild-do-table等参数,有跨库更新问题,试了几次都失败了,官方文档:https://dev.mysql.com/doc/refman/5.6/en/replication-options-slave.html
③、从旧数据库old_db中同步已有数据到slave中:
- master的my.ini中增加:binlog-do-db=old_db
- 重启master服务,锁定所有表:flush tables with read lock;
- 查看状态:show master status; 记录File和Position
- 将master中的data目录下old_db文件夹拷贝到slave的data目录中
- 编辑slave的my.cnf,添加:replicate-do-db=old_db
- 重启slave服务:service mysql restart
- 重新设置slave同步信息:
- stop slave;
- change master to master_host="127.0.0.1",master_user="root",master_password="root",master_port=3306,
- start slave;
- show slave status;状态正常
- 解锁master表:unlock tables;