安装前准备
powershell
# yum -y install epel-realease
# vim /etc/selinux/config
SELINUX=disabled
# systemctl stop firewalld
# systemctl disable firewalld
安装mysql
一、更新YUM源
powershell
# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
二、安装
powershell
# yum -y install mysql-community-server
三、启动MySQL、设置开机启动
powershell
# systemctl start mysqld
# systemctl enable mysqld
四、登录mysql重置密码
查看初始密码
powershell
# cat /var/log/mysqld.log | grep password(若没有输出则没有密码)
登录mysql
powershell
# mysql -uroot -p
修改、设置密码
sql
mysql > alter user root@'localhoost' identified by "password";
配置主从同步
一、确保已有数据相同
从库上必须和主库已有数据相同
master服务器,备份所有库
slave服务器,清空同名库(如果有的话),离线导入由master提供的备份
二、配置主服务器
1、启用binlog日志
powershell
# vim /etc/my.cnf
[mysqld]
log_bin=master51
server_id=51 #mysql主从里,id必须唯一,范围:1~255
binlog_format="mixed"
重启刷新文件配置
powershell
# systemctl restart mysqld
#查看主库master状态,查看当前使用的binlog日志文件
sql
mysql> show master status\G;
2、授权用户
sql
mysql >grant replication slave on *.* to user@'%' identified by 'hmabp123';
3、查看当前正使用的日志
sql
mysql > show master status;
三、配置从服务器
1、设置server_id
powershell
# vim /etc/my.cnf
server_id=52 #从库id,要唯一
重启刷新文件配置
powershell
# systemctl restart mysqld
2、指定主库信息
sql
mysql> change master to
-> master_host='192.168.*.*', //主库ip地址
-> master_user='user', //主库授权用户名
-> master_password='hmabp123', //授权用户名密码
-> master_log_file='master51.000001', //日志文件
-> master_log_pos=441; //偏移量
#启动slave(io,sql线程)
mysql> start slave;
mysql> show slave status\G;
重新搭建主从同步,保证数据一致
报错:
错误现象1:无法更新某张表,数据有丢失或重复。此时查看主从同一张表,行数对比不一样,此时需要手动重新导入单张表。

错误现象2:主键重复。查看主从两台的主键是否一样,从库主键是否有重复,若有重复直接删除重复主键;若没有,此时不要reset master,重新change从库的pos。

错误现象3:
跳过一个事务报错

解决办法:跳过错误
(1)停止slave进程
sql
mysql> STOP SLAVE;
(2)设置事务号,事务号从Retrieved_Gtid_Set获取
在session里设置gtid_next,即跳过这个GTID
sql
mysql> SET @@SESSION.GTID_NEXT= '8f9e146f-0a18-11e7-810a-0050568833c8:4'
(3)设置空事物
sql
mysql> BEGIN; COMMIT;
(4)恢复事物号
sql
mysql> SET SESSION GTID_NEXT = AUTOMATIC;
(5)启动slave进程
sql
mysql> START SLAVE;
若报以下错误,需执行(4)恢复事务号
sql
mysql> stop slave;
ERROR 1837 (HY000): When @@SESSION.GTID_NEXT is set to a GTID, you must explicitly set it to a different value after a COMMIT or ROLLBACK. Please check GTID_NEXT variable manual page for detailed explanation. Current @@SESSION.GTID_NEXT is 'a2e7f9c4-e96c-11ea-99ad-52540085b698:1057'.
使用GTID跳过错误的方法:找到错误的GTID跳过(通过Exec_Master_Log_Pos去binlog里找GTID,或则通过上面监控表replication_applier_status_by_worker找到GTID,也可以通过Executed_Gtid_Set算出GTID),这里使用监控表来找到错误的GTID。找到GTID之后,跳过错误的步骤:
sql
mysql> stop slave; #停止同步
Query OK, 0 rows affected (0.02 sec)
mysql> set @@session.gtid_next='9e2c7c0f-0908-11e7-8230-000c29ab7544:1'; #跳过错误的GTID
Query OK, 0 rows affected (0.00 sec)
mysql> begin; #提交一个空事务,因为设置gtid_next后,gtid的生命周期就开始了,必须通过显性的提交一个事务来结束,否则报错:ERROR 1790 (HY000): @@SESSION.GTID_NEXT cannot be changed by a client that owns a
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.01 sec)
mysql> set @@session.gtid_next=automatic; #设置回自动模式
Query OK, 0 rows affected (0.00 sec)
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
再次确认slave同步状况
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的mysqld可添加修改如下选项:
powershell
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game