以下是配置MySQL主从同步的步骤:
一、环境配置
- 服务器A(主服务器):已安装MySQL,IP地址为192.168.1.1
- 服务器B(从服务器):新开启的服务器,需要安装MySQL,IP地址为192.168.1.2
二、操作步骤
在主服务器A上:
-
修改MySQL配置文件,一般在/etc/my.cnf或者/etc/mysql/my.cnf,添加以下配置:
[mysqld] server-id=1 log-bin=mysql-bin -
重启MySQL服务:
service mysql restart -
创建用于同步的账户:
mysql> CREATE USER 'repl'@'192.168.1.2' IDENTIFIED BY 'password'; mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2'; -
查看主服务器状态:
mysql> SHOW MASTER STATUS;记下File和Position的值,后面在从服务器上配置的时候会用到。
在从服务器B上:
-
修改MySQL配置文件,添加以下配置:
[mysqld] server-id=2 -
重启MySQL服务:
service mysql restart -
配置同步:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107;注意:MASTER_LOG_FILE和MASTER_LOG_POS的值就是我们在主服务器上SHOW MASTER STATUS的结果。
-
启动同步:
mysql> START SLAVE; -
查看同步状态:
mysql> SHOW SLAVE STATUS\G;如果看到Slave_IO_Running和Slave_SQL_Running都是Yes,那么说明主从同步配置成功。
如果网络中断,MySQL从服务器会自动尝试重新连接主服务器。但是,如果主服务器长时间无法连接,从服务器可能会停止复制。为了避免这种情况,可以使用slave_net_timeout参数来配置从服务器等待连接恢复的时间。
在从服务器上MySQL的配置文件(my.cnf或者my.ini)中,你可以添加或修改以下行:
[mysqld]
slave_net_timeout = 60
这个设置将使从服务器在网络中断后等待60秒后尝试重新连接。如果网络在这个时间内恢复,复制将继续。如果网络在这个时间内没有恢复,从服务器将停止复制,并尝试再次启动复制。这个参数只影响网络连接中断的情况,如果主服务器关闭或者重启,从服务器仍然需要人工介入来恢复复制。
这个一定要看哈
slave_net_timeout参数设置的是从服务器等待主服务器的网络连接恢复的时间。如果在这个时间段内网络没有恢复,从服务器会停止复制,并尝试重新建立与主服务器的连接。
也就是说,如果网络中断超过了slave_net_timeout设定的时间,从服务器并不会彻底停止,而是会尝试重新连接主服务器。这个过程会持续进行,直到网络恢复并且从服务器成功地重新连接到主服务器为止。
所以,如果你的网络连接经常中断,并且中断时间较长,你可能需要将slave_net_timeout的值设定得更大一些,以减少从服务器尝试重新连接的频率。但是,这也意味着从服务器在网络恢复后可能需要更长的时间才能重新开始复制数据。
有时候主服务器的sql挂了,涉及一些原因可能要手动介入
当主服务器重启后,从服务器确实会尝试重新连接并开始复制。但是,在某些情况下,复制可能无法自动恢复,例如:
-
主服务器重启后,二进制日志文件(binlog)的名称或位置改变了,而从服务器还在尝试读取旧的日志文件或位置。
-
主服务器重启过程中,未能正确写入或同步所有的二进制日志,导致从服务器无法正确读取或解析。
-
主服务器的复制用户权限发生改变,从服务器无法使用原来的用户名和密码重新连接。
在这些情况下,可能需要手动介入来修复问题并恢复复制。具体操作可能包括重新配置主从同步,更改从服务器的复制位置,或者更改复制用户的权限等。
主服务器重启后,如果从服务器无法自动重新连接并开始复制,可以按照以下步骤手动恢复:
-
首先,需要在主服务器上查看当前的二进制日志文件(binlog)的名称和位置。可以使用以下命令:
mysql> SHOW MASTER STATUS;记下File和Position的值。
-
然后,在从服务器上停止当前的复制进程,并重新配置主从同步。使用以下命令:
mysql> STOP SLAVE; mysql> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; mysql> START SLAVE;在这里,MASTER_LOG_FILE和MASTER_LOG_POS的值应该使用你在主服务器上SHOW MASTER STATUS看到的值,不要搞错了哈。
-
最后,可以使用SHOW SLAVE STATUS命令查看从服务器的复制状态,确认复制是否已经成功恢复。
还有就是你如果希望从服务器在主服务器重启后能够更可靠地自动恢复复制,可以考虑使用半同步复制(semi-synchronous replication)或者GTID(全局事务标识符)复制,这些复制方式可以更好地处理主服务器重启等问题。
至于半同步复制,它是一种在主服务器和从服务器之间提供更强一致性保证的复制方式。在半同步复制中,主服务器在提交事务之前,会等待至少一个从服务器确认已经接收到了这个事务的二进制日志事件。
以下是配置半同步复制的步骤:
-
在主服务器和从服务器上安装半同步复制插件。可以在MySQL服务器启动时使用以下命令:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; -
在主服务器的配置文件中启用半同步复制,并设置rpl_semi_sync_master_timeout参数,这个参数指定了主服务器在等待从服务器确认的最长时间。
[mysqld] plugin-load=rpl_semi_sync_master=semisync_master.so rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 # 设置为1秒 -
在从服务器的配置文件中启用半同步复制。
[mysqld] plugin-load=rpl_semi_sync_slave=semisync_slave.so rpl_semi_sync_slave_enabled=1 -
重启主服务器和从服务器的MySQL服务,使新的配置生效。
-
最后,可以使用SHOW VARIABLES命令查看半同步复制是否已经启用:
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';如果看到rpl_semi_sync_master_status和rpl_semi_sync_slave_status都是ON,那么说明半同步复制已经成功启用。
你要是觉得复杂就去下面链接拿脚本把,做个定时任务,中午和晚上各一次,至于怎么搞就看你们具体业务量了,反正运维不能背锅,哈哈哈哈
利用Python定时备份MYSQL
Pingback:用Python定时备份Mysql - 无双的个人博客