centos7 mysql主从同步
一、准备两个mysql服务并修改配置文件
1、总体配置思路
数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值,主从server-id不能一样
启用二进制日志
配置二进制日志格式(如果使用mycat2进行读写分离官网建议生产模式用row格式)
从库开启中继日志
需要同步的二进制数据库名
同步磁盘提交的次数(可不配,默认为0,当缓存满了就同步到磁盘)
不需要同步的二进制数据库
2、主库配置文件添加:
server-id=1
log-bin=mysql-bin
binlog_format=mixed
#sync-binlog=1
binlog-do-db=slavetest
binlog-ignore-db=information_schema
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
3、从库配置文件添加:
server-id=2
log-bin=mysql-bin
binlog_format=mixed
relay-log=mysql-relay
#sync-binlog=1
replicate-do-db=slavetest
replicate-ignore-db=information_schema
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
二、为同步添加账号(一般不用root账号)
1、创建用户
创建用于复制的账号,由于主从同步的默认方式非ssl模式,mysql8之后的连接默认要求ssl,故创建时指定为旧版加密方式(WITH mysql_native_password)
create user 'username'@'localhost' identified with mysql_native_password by 'password';
2、为用户分配同步权限
grant replication slave on *.* to 'username'@'localhost';
三、进行主从同步配置
1、获取主库bin-log-file和bin-log-pos信息
show master status
记录File和Position的信息
2、从库配置主库信息
change master to
master_host='127.0.0.1',
master_user='slavetest',
master_password='slavetest',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=874
3、从库开启同步和查看同步状态
开始同步
start slave;
查看状态
show slave status\G
当Slave_IO_Running和Slave_SQL_Running都为yes的时候才说明同步正常。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
四、可能出现的情况
Slave_IO_Running为Connecting或者Slave_IO_State为Connecting to source时,导致的原因可能是mysql8的密码方式采用的跟之前的不同,需要这么来使用就可以了在从库进行授权位置的时候添加参数:get_master_public_key=1。
Slave_IO_State: Connecting to source
Slave_IO_Running: Connecting
即配置主库信息的时候添加(需要暂停同步):
change master to
master_host='127.0.0.1',
master_user='slavetest',
get_master_public_key=1,
master_password='slavetest',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=874;
然后重新开启同步。