一、搭建环境
1.两台服务器 192.168.15.3(主库服务器) 192.168.15.4(从库服务器)
2.两台服务器都已经安装mysql服务,如果没有安装请参考一下连接安装
CentoS 7.8.2003 安装篇五:Mysql_mhi()的博客-CSDN博客
二、主库服务器mysql调整
1.在mysql配置文件my.cnf内该 [mysqld] 位置添加以下参数
# 主从配置
server-id = 1 #服务器 id,随意,但要唯一
log-output=NONE
general-log=0
slow-query-log=0
long_query_time=10
log-bin =/jysoft/mysql/mysql-3406/data/mysql-bin #二进制文件存放路径
binlog_format=row
expire_logs_days=20
#binlog-ignore-db=mysql #不同步的数据库
2.创建同步操作专属账号
#登录
mysql -u root -p密码
#创建用户 我这里用户名为asyncuser,注意这里的ip是从库服务器的ip
CREATE USER 'asyncuser'@'192.168.15.4' IDENTIFIED WITH mysql_native_password BY '123456';
#给主从复制账号授权
grant replication slave on *.* to 'asyncuser'@'192.168.15.4';
3.重启主库mysql服务
/etc/init.d/mysql-3406 stop
/etc/init.d/mysql-3406 start
4.重启完毕之后,登录mysql服务,执行 以下命令
show master status;
记录一下 File、Position值,从库配置需要;
到这里主库配置结束。
三、从库mysql服务调整
1.调整mysql配置文件,同主库。具体参数有区别
server-id = 4
log-output=NONE
general-log=0
slow-query-log=0
long_query_time=10
log-bin =/jysoft/mysql/mysql-3406/data/mysql-bin
replicate-ignore-db=mysql,information_schema,performance_schema #不同步的数据库
以上面主库配置相比,就是除了server-id
不一样,这里还需要配置replicate-ignore-db,注意不是日志
2.重启从库mysql服务,重启命令同主库命令
3.主从同步配置
#1,先登录mysql,然后执行后续代码
mysql -u root -p密码
#2,关闭从库
stop slave;
#3,设置同步,注意这里是主库ip,日志名称和位置是我们之前上图中看到的名称和位置
change master to master_host='192.168.15.3',master_user='asyncuser',master_password='123456',master_port=3306,,master_log_file='mysql-bin.000002',master_log_pos=1631;
#4,开启从库
start slave;
# 5,检查服务器状态
show slave status \G;
以上注意这两个参数:master_log_file='mysql-bin.000002',master_log_pos=1631;.这两个值对应的是主库 show master status; 命令查询出来的值
出现以下表示主从成功
可以在主动数据库,插入一条数据,从库数据库会相应生成一条,尽情狂欢把
四、以上操作可能出现问题及解决方案
错误(1):atal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
出现以上问题,排查两个地方
1.主库与从库配置文件 server-id = 4 这个值不能一样
1.1 .如果值不一样,可能配置完毕之后没有重启mysql,两台服务器都重启一下mysql服务
2. 登录mysql ,使用 show variables like '%server_uuid%'; 查看两台服务器这个值是否唯一,如果不唯一,则在mysql配置文件中手动指定
server-uuid=xxxxxxxxxxxxxxxxxxxxxxxxxx
错误(2):Error 'Can't create database 'test'; database exists' on query. Default database: 'test'. Query: 'CREATE DATABASE `test` CHARACTER SET 'utf8mb4''
解决办法:删除从库中 test 数据库,
stop slave;
#4,开启从库
start slave;
# 5,检查服务器状态
show slave status \G;