mysql5.7配置主从同步、windows主和linux从

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vipbupafeng/article/details/80272946

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配置

windows修改E:\ProgramData\MySQL\MySQL Server 5.7目录的my.ini文件:
# 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,
       master_log_file="mysql-bin.000002",master_log_pos=154;
  • start slave;
  • show slave status;状态正常
  • 解锁master表:unlock tables;

猜你喜欢

转载自blog.csdn.net/vipbupafeng/article/details/80272946