mysql主主配置(Master-Master)
环境说明:
两台主,端口3306设置防火墙例外,两台MySQL安装版本相同,这里使用的是MySQL5.7.34版本。
主配置一 Master1:192.168.3.63 同步账号:tongbu63
主配置二 Master2:192.168.3.64 同步账号:tongbu64
预先处理,导出需要同步数据库数据:
mysqldump -uroot -p761479629@Lt -B HA > HA.sql
其中-B表示包含数据库创建语句预计其他创建语句。
主配置1:
1、修改my.cnf配置
必须配置
server-id=1
log_bin=mysql-bin-master1
可选配置(选择同步与不同步的数据库)
#选择需要同步的数据库为HA,不加以下这条默认全部数据库同步。
binlog-do-db=HA
#选择不同步数据库,建议设置(避免同步导致登录链接数据库账号混乱)
binlog-ignore-db=mysql
binlog_ignore_db=information_schema
2、创建主同步账户tongbu63
grant replication slave on *.* to 'tongbu63'@'%' identified by '761479629Lt';
flush privileges;
提示弱密码处理方法:
set global validate_password_policy=0;
set global validate_password_length=4;
*可选*关闭安全策略
5.7以上版本 关闭密码安全策略插件:在my.cnf添加 validate-password=off 重启mysql。
3、设置从同步参数
参考Master2的show master status的参数值填写master_log_file='mysql-bin-master2.000001'和master_log_pos=4406;
change master to master_host='192.168.3.64',master_user='tongbu64',master_password='761479629Lt',master_log_file='mysql-bin-master2.000001',master_log_pos=4406;
4、重启MySQL,查看主服务器当前二进制日志名和偏移量
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin-master1.000001 | 4406 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.04 sec)
5、在Master2上测试从同步账号是否能登录主Master1
mysql -utongbu63 -p761479629Lt -h 192.168.3.63
Master2前5步测试完成后才执行第六步
6、启动slave进程,查看同步状态
网上有些使用slave start; 会报错提示有语法错误,请更换使用 start slave;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
查看同步状态:
show slave status\G;
确保这两项正常:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
7、数据库测试,写几条数据测试下,能同步就可以了
暂时关闭同步命令:
set sql-log-bin=off;
查看二进制log-bin事件
mysql> show binlog events\G
==================================================================================================
主配置2:
1、修改my.cnf配置
必须配置
server-id=2
log_bin=mysql-bin-master2
可选配置(选择同步与不同步的数据库)
binlog-do-db=HA
binlog-ignore-db=mysql
binlog_ignore_db=information_schema
2、创建主同步账户
grant replication slave on *.* to 'tongbu64'@'%' identified by '761479629Lt';
flush privileges;
3、设置从同步参数
参考Master1的show master status的参数值填写master_log_file='mysql-bin-master1.000001'和master_log_pos=4406;
change master to master_host='192.168.3.63',master_user='tongbu63',master_password='761479629Lt',master_log_file='mysql-bin-master1.000001',master_log_pos=4406;
4、重启MySQL,查看主服务器当前二进制日志名和偏移量
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 4406 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.04 sec)
5、在Master1上测试从同步账号是否能登录主Master2
mysql -utongbu64 -p761479629Lt -h 192.168.3.64
Master1前5步测试完成后才执行第六步
6、启动slave进程,查看同步状态
网上有些使用slave start; 会报错提示有语法错误,请更换使用 start slave;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
查看同步状态:
show slave status\G;
确保这两项正常:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
7、数据库测试,写几条数据测试下,能同步就可以了
==========================================================================
同步主库已有数据到从库
主库操作:
1、停止主库的数据更新操作
mysql>flush tables with read lock;
2、新开终端,生成主数据库的备份(导出数据库)
[root@zhoujietest ~]# mysqldump -uroot -proot student > student.sql
3、将备份文件传到从库
[root@zhoujietest ~]# scp student.sql [email protected]:/root/
4、主库解锁
mysql>unlock tables;
从库操作:
1、停止从库slave
mysql>stop slave;
2、新建数据库student
mysql> create database student default charset utf8;
3、导入数据
[root@ops-dev ~]# mysql -uroot -proot student<student.sql
4、查看从库已有该数据库和数据
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
|student |
| mysql |
| performance_schema |
| test |
+--------------------+
==============================================================================
排错思路:
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程
如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。
在主服务器上看二进制日志事件列表
mysql> show binlog events \G
从服务器执行MySQL命令下:
mysql> stop slave; #先停止slave服务
mysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1164;
#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
排错思路:
1、二进制日志没有开启
2、IPTABLES 没有放开端口
3、对应的主机 IP地址写错了
SQL线程出错
1、主从服务器数据库结构不统一
出错后,数据少,可以手动解决创建插入,再更新slave状态。
注:如果主上误删除了。那么从上也就误删除了。 #因此主上要定期做mysqldump备份。