安装前准备
# yum -y install epel-realease
# vim /etc/selinux/config
SELINUX=disabled
# systemctl stop firewalld
# systemctl disable firewalld
安装mysql
一、更新YUM源
# rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
二、安装
# yum -y install mysql-community-server
三、启动MySQL、设置开机启动
# systemctl start mysqld
# systemctl enable mysqld
四、登录mysql重置密码
查看初始密码
# cat /var/log/mysqld.log | grep password(若没有输出则没有密码)
登录mysql
# mysql -uroot -p
修改、设置密码
mysql > alter user root@’localhoost’ identified by “password”;
配置主从同步
一、确保已有数据相同
从库上必须和主库已有数据相同
master服务器,备份所有库
slave服务器,清空同名库(如果有的话),离线导入由master提供的备份
二、配置主服务器
1、启用binlog日志
# vim /etc/my.cnf
[mysqld]
log_bin=master51
server_id=51 #mysql主从里,id必须唯一,范围:1~255
binlog_format="mixed"
重启刷新文件配置
# systemctl restart mysqld
查看主库master状态,查看当前使用的binlog日志文件
mysql> show master status\G;
2、授权用户
mysql >grant replication slave on *.* to user@'%' identified by 'abcd123';
3、查看当前正使用的日志
mysql > show master status;
三、配置从服务器
1、设置server_id
# vim /etc/my.cnf
server_id=52 #从库id,要唯一
重启刷新文件配置
# systemctl restart mysqld
2、指定主库信息
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进程
mysql> STOP SLAVE;
(2)设置事务号,事务号从Retrieved_Gtid_Set获取
在session里设置gtid_next,即跳过这个GTID
mysql> SET @@SESSION.GTID_NEXT= '8f9e146f-0a18-11e7-810a-0050568833c8:4'
(3)设置空事物
mysql> BEGIN; COMMIT;
(4)恢复事物号
mysql> SET SESSION GTID_NEXT = AUTOMATIC;
(5)启动slave进程
mysql> START SLAVE;
若报以下错误,需执行(4)恢复事务号
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'.
半同步复制
查看数据库服务是否允许动态加载模块:
> show variables like 'have_dynamic_loading';
查看是否已安装了模块:
> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';
1.在主库上安装模块
> install plugin rpl_semi_sync_master soname 'semisync_master.so';
在从库上安装模块:
> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
2.必须同时两端激活
在运行时,在 master上执行
> SET GLOBAL rpl_semi_sync_master_enabled=1;
> SET GLOBAL rpl_semi_sync_master_timeout=3000;
在 slave上执行
> SET GLOBAL rpl_semi_sync_slave_enabled=1;
> STOP SLAVE IO_THREAD;START SLAVE IO_THREAD;
看配置 :
> SHOW VARIABLES LIKE 'rpl_semi_symc% ';
看状态:
> SHOW STATUS LIKE 'rpl_semi_symc% ';
永久启用半同步复制:/etc/my.cnf
主库的配置:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 #1秒
从库的配置:
[mysqld]
rpl_semi_sync_slave_enabled=1