背景
已经搭建好了多台服务器的mysql环境,详情见https://blog.csdn.net/qq_41488523/article/details/112723759
搭建MySQL主从
主库
编辑my.cnf文件,windows下是my.ini
vi /etc/my.cnf
添加以下内容
#logbin
log_bin=mysql-bin #开启binlog
server-id=1 #设置ID全局唯一
sync-binlog=1 #写入操作就与磁盘同步
binlog-ignore-db=information_schema #设置不同步的库
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#binlog-do-db=test #设置同步的库
重启mysql服务
systemctl restart mysqld
登录mysql并授权(Admin123!是MySQL的密码)
grant replication slave on *.* to 'root'@'%' identified by 'Admin123!';
grant all privileges on *.* to 'root'@'%' identified by 'Admin123!';
flush privileges;
查看并记住中继日志的名字和当前位置(File和Position)
show master status;
从库
vi /etc/my.cnf
#logbin
server-id=2 #设置ID全局唯一
relay_log=mysql-relay-bin#设置中继日志名字
read_only=1#只读
systemctl restart mysqld
查看从库状态(第一次应该是Empty set,如果不是,可以调用stop slave停止之前的主从信息)
show slave status;
制定主库信息(上面看到File和Position会在这里用到)
change master to master_host='192.168.1.101',master_port=3306,master_user='root',master_password='Admin123!',master_log_file='mysql-bin.000001',master_log_pos=869;
开启
start slave;
查看信息
show slave status \G;
如果查看到一下信息,则说明配置正常
Slave_IO_Running:Connection
Slave_SQL_Running:Yes
异常
但我第一次配的时候出现了:Slave_IO_Running:No。调查之后才发现是mysql 有个uuid , 而uuid 是唯一标识的。
因为我之前是直接服务器克隆过来了,所以mysql的的uuid的值是一样的,只要删除那个文件就行了:
如果是使用yum安装的话,记录uuid的文件应该在这个路径
vi /var/lib/mysql/auto.cnf
这里不删除了给他留个备份
systemctl stop mysqld
mv /var/lib/mysql/auto.cnf /var/lib/mysql/auto.cnf.bak
systemctl start mysqld
双主模式
备份主库所有数据到当前目录下(这一步没有什么用,就是以后主库数据量大的时候要添加从库的话从库可以先和这个文件同步再和主库同步,节省一点主库主机的资源)
mysqldump --all-databases > mysql_backup_all.sql -uroot -p
这里是根据原先配的主从添加一个新的主库
主库1
vi /etc/my.cnf
追加以下信息
relay_log=mysql-relay-bin
log_slave_updates=1#更新操作要不要写到bin里面去
auto_increment_offset=1#主键递增基本值,双主双写要错开1,3,5,7,...
auto_increment_increment=2#主键递增跳跃偏移量
登录,记住File和Position
show master status;
主库2
#logbin
log_bin=mysql-bin #开启binlog
server-id=4 #设置ID全局唯一
sync-binlog=1 #写入操作就与磁盘同步
binlog-ignore-db=information_schema #设置不同步的库
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
#binlog-do-db=test #设置同步的库
#双主模式
relay_log=mysql-relay-bin
log_slave_updates=1#更新操作要不要写到bin里面去
auto_increment_offset=2#主键递增基本值,双主双写要错开2,4,6,8,.....
auto_increment_increment=2#主键递增跳跃偏移量
systemctl restart mysqld
登录后授权
grant replication slave on *.* to 'root'@'%' identified by 'Admin123!';
grant all privileges on *.* to 'root'@'%' identified by 'Admin123!';
flush privileges;
查看主库2的中继日志的Position和File信息
show master status;
把主库2作为主库1的从库
change master to master_host='192.168.1.101',master_port=3306,master_user='root',master_password='Admin123!',master_log_file='mysql-bin.000002',master_log_pos=154;
start slave;
show slave status \G;
主库1
把主库1作为主库2的从库
change master to master_host='192.168.1.104',master_port=3306,master_user='root',master_password='Admin123!',master_log_file='mysql-bin.000001',master_log_pos=884;
start slave;
show slave status \G;