在 MySQL 的世界里,复制不仅仅是数据的翻版,它是提高数据可用性、可靠性和灾难恢复能力的关键技术。让我们深入了解如何启动你的复制之旅,确保你的数据不会因为任何意外而遗失。
6.1.1 基础知识
复制允许数据从一个 MySQL 服务器(主服务器)同步到一个或多个 MySQL 服务器(从服务器)。这个过程可以是异步的,也可以是半同步的,取决于你对数据一致性的需求。
-
主从复制配置:在主服务器上,你需要启用二进制日志并创建一个具有复制权限的用户。在从服务器上,你需要配置连接到主服务器的信息,包括主服务器的 IP 地址、复制用户的用户名和密码,以及要从哪个点开始复制的二进制日志文件名和位置。
-
启动复制过程:在从服务器上执行
CHANGE MASTER TO
命令以指定主服务器的详情,然后启动复制进程。 -
监控复制状态:使用
SHOW SLAVE STATUS\G
来检查从服务器的复制状态,确保Slave_IO_Running
和Slave_SQL_Running
都是Yes
。
6.1.2 重点案例:使用 Python 设置 MySQL 主从复制
假设你负责一个在线商店的数据库管理工作,需要设置复制来增加数据的可用性和备份。
步骤:
-
在主服务器上配置:
-
编辑 MySQL 配置文件(通常是
/etc/my.cnf
或/etc/mysql/mysql.conf.d/mysqld.cnf
),启用二进制日志并指定服务器 ID。[mysqld] log_bin=mysql-bin server_id=1
-
重启 MySQL 服务使配置生效。
-
创建复制用户。
CREATE USER 'replicator'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%'; FLUSH PRIVILEGES;
-
-
在从服务器上配置:
-
同样地编辑 MySQL 配置文件,指定一个唯一的服务器 ID。
[mysqld] server_id=2
-
重启 MySQL 服务。
-
使用 Python 连接到从服务器的 MySQL 实例,并配置复制。
import mysql.connector conn = mysql.connector.connect(host='slave_host', user='root', password='yourpassword') cursor = conn.cursor() cursor.execute(f"CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='replicator', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 154;") cursor.execute("START SLAVE;")
-
6.1.3 拓展案例 1:自动故障转移
假设主服务器突然宕机,你需要快速将从服务器提升为新的主服务器,同时保持业务的连续性。
-
在从服务器上停止复制进程,并提升为主服务器。
cursor.execute("STOP SLAVE;") cursor.execute("RESET MASTER;")
-
更新应用配置,将数据库连接指向新的主服务器。
6.1.4 拓展案例 2:设置双主复制
在某些场景下,你可能需要两个数据库服务器互为主备,以实现高可用性。
- 在两个服务器上互相配置对方为主服务器,确保开启二进制日志并设置不同的
server_id
。 - 使用 Python 在两个服务器上互相执行
CHANGE MASTER TO
,指定对方的详情。
通过以上案例,你不仅学会了如何使用 Python 来设置和管理 MySQL 的复制,还探索了如何在实际生产环境中应用复制来提高数据的可用性和灾难恢复能力。这些技能对于任何希望确保数据安全和业务连续性的数据库管理员来说都是宝贵的资产。