2.3.2 向主服务器的数据库中插入一些行数据:
INSERT INTO mytable (id, name, age) VALUES (1, 'John', 30); INSERT INTO mytable (id, name, age) VALUES (2, 'Mary', 25);
2.3.3 启用 MySQL 的二进制日志(binlog):
在 MySQL 配置文件 my.cnf 中添加以下信息:
[mysqld] log-bin=mysql-bin server-id=1
2.3.4 在从服务器上启用混合型复制:
在 MySQL 配置文件 my.cnf 中添加以下信息:
[mysqld] server-id=2 log-slave-updates=TRUE binlog-format=MIXED relay-log=relay-bin
2.3.5 在从服务器上添加主服务器的信息:
CHANGE MASTER TO MASTER_HOST='主服务器的IP地址', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='主服务器的binlog文件名', MASTER_LOG_POS=主服务器的binlog偏移量;
其中,replication_user 和 replication_password 是主服务器上的授权访问从服务器的账号和密码;主服务器的binlog文件名和偏移量可以通过 SHOW MASTER STATUS 命令获得。
2.3.6 开始混合型复制:
START SLAVE;
2.3.7 在主服务器上更新一些行数据和插入数据:
UPDATE mytable SET age=35 WHERE id=1; INSERT INTO mytable (id, name, age) VALUES (3, 'Tom', 20);
2.3.8 在从服务器上检查数据同步情况:
SELECT * FROM mydatabase.mytable;
可以发现,从服务器上的 mytable 表的前两条数据是通过行复制同步而来的,而第三条数据是通过语句复制同步而来的。
需要注意的是,在混合型复制中,如果 SQL 语句无法被正确解析,就会使用行复制进行数据同步。因此,如果在使用混合型复制的过程中出现了数据不一致的情况,需要检查主从服务器之间的数据同步方式是否一致,以及 SQL 语句是否可以被正确解析。
3. 主从复制应用场景
MySQL主从复制可以应用于以下场景:
3. 1 数据备份
主从复制可以实现主服务器的数据备份。从服务器可以作为备份服务器,当主服务器数据丢失或出现故障时,可以快速启用备份服务器以恢复数据。
以下是数据备份的操作示例:
- 在主服务器上启用二进制日志(binlog)功能: 在 MySQL 配置文件 my.cnf 中添加以下信息:
[mysqld] log-bin=mysql-bin server-id=1
- 在从服务器上启用基于语句的复制: 在 MySQL 配置文件 my.cnf 中添加以下信息:
[mysqld] server-id=2 binlog-format=STATEMENT log-slave-updates=TRUE relay-log=relay-bin
- 将主服务器的数据复制到从服务器:
在从服务器上添加主服务器的信息:
CHANGE MASTER TO MASTER_HOST='主服务器的IP地址', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='主服务器的binlog文件名', MASTER_LOG_POS=主服务器的binlog偏移量;
其中,replication_user 和 replication_password 是主服务器上的授权访问从服务器的账号和密码;主服务器的binlog文件名和偏移量可以通过 SHOW MASTER STATUS 命令获得。
- 然后,在从服务器上启动复制流程:
START SLAVE;
- 手动备份数据: 在从服务器上,使用 mysqldump 命令备份数据库数据到本地文件,例如:
mysqldump -u root -p mydatabase > mydatabase.sql
- 自动备份数据: 对于自动备份,可以通过配置 crontab 定时任务,在特定时间自动备份数据库数据。例如:
0 0 * * * mysqldump -u root -p mydatabase > /backup/mydatabase-`date +"%Y%m%d"`.sql
以上命令指定在每天 0 点执行备份操作,并将备份文件保存在 /backup 目录下,以日期为后缀进行命名,如 mydatabase-20211010.sql。
需要注意的是,备份文件需要存储在安全的地方,以免数据泄露或丢失。另外,备份操作可能会影响服务器的性能,因此需要根据实际情况选择合适的备份时间。
3. 2 负载均衡
主从复制可以通过将查询请求转发到从服务器上进行读操作,以减轻主服务器的负载,提高整体的并发处理能力。
以下是负载均衡的操作示例:
- 在主服务器上启用二进制日志(binlog)功能:
在 MySQL 配置文件 my.cnf 中添加以下信息:
[mysqld] log-bin=mysql-bin server-id=1
- 在从服务器上启用基于语句的复制:
在 MySQL 配置文件 my.cnf 中添加以下信息:
[mysqld] server-id=2 binlog-format=STATEMENT log-slave-updates=TRUE relay-log=relay-bin
- 将主服务器的数据复制到从服务器:
在从服务器上添加主服务器的信息:
CHANGE MASTER TO MASTER_HOST='主服务器的IP地址', MASTER_USER='replication_user', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='主服务器的binlog文件名', MASTER_LOG_POS=主服务器的binlog偏移量;
其中,replication_user 和 replication_password 是主服务器上的授权访问从服务器的账号和密码;主服务器的binlog文件名和偏移量可以通过 SHOW MASTER STATUS 命令获得。
然后,在从服务器上启动复制流程:
START SLAVE;