原文作者:我辈李想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。
MySQL 主从复制是指将一个 MySQL 数据库的更改同步到其他 MySQL 数据库的过程。其中,一个 MySQL 数据库作为主库(master),其余的 MySQL 数据库作为从库(slave)。MySQL主从复制是一种数据备份和高可用性解决方案。它通过自动复制主数据库的更改,将数据传递到一个或多个从属数据库,以创建多个数据库副本。这样可以提高数据可靠性,避免单点故障,提高系统的可用性和性能。
配置主从复制需要完成2个工作,第一就是存量数据同步,第二就是增量数据同步。具体配置过程中会将2项工作一起配置。
主从数据库在同一个局域网内,可以互相访问。
主从数据库的MySQL版本必须相同。
主从数据库的建表语句必须一致。
主从数据库必须使用相同的字符集。
主库的数据更新会实时同步到从库中,如果从库中有数据修改,可能会影响主库中的数据完整性和一致性。
不要在主服务器上执行更新,否则将破坏副本。
不要在从服务器上执行写操作,否则将破坏复制。
mysql> CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
vi /etc/my.cnf
# 在[mysqld]段中添加如下内容
[mysqld]
server-id = 1
log_bin = log-bin # log-bin一般为 /var/log/mysql/mysql-bin.log
#设置不要复制的数据库
binlog-ignore-db=mysql
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
其中,log-bin参数用于启用二进制日志,并设置二进制日志文件名为mysql-bin;server-id参数用于设定主服务器的唯一标识符,可以是任何整数。
可以使用以下命令查看当前的二进制日志状态:
mysql> SHOW MASTER STATUS\G;
输出类似以下内容:
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
其中,File和Position字段表示当前二进制日志文件名和位置,需要记录下来以备用。
在主服务器上执行FLUSH TABLES WITH READ LOCK命令,以确保主服务器当前没有任何活动的事务。
mysql> FLUSH TABLES WITH READ LOCK;
shell> mysqldump -u root -p --all-databases --master-data > dumpfile.sql
# 指定数据库
shell> mysqldump -u root -p --databases database_name > database_name.sql
在my.cnf中添加以下行:
[mysqld]
server-id = 2
其中,server-id参数用于设定从服务器的唯一标识符。
将主数据库的备份文件导入从数据库
shell> mysql -u root -p database_name < database_name.sql
shell> mysql -u root -p
mysql> STOP SLAVE;
mysql> CHANGE MASTER TO
MASTER_HOST = 'master_host_name',
MASTER_USER = 'replication_user',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_LOG_POS = 107;
其中,MASTER_HOST参数为主服务器的主机名或 IP 地址,MASTER_USER和MASTER_PASSWORD参数为在主服务器上创建的数据库用户的用户名和密码,MASTER_LOG_FILE和MASTER_LOG_POS参数为记录的主服务器的二进制日志文件名和位置。
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS \G
确认Slave_IO_Running和Slave_SQL_Running值为YES,则表示从服务器与主服务器的通信正常。
mysql> SHOW MASTER STATUS;
mysql> SHOW SLAVE STATUS\G;
如果复制状态为 Yes,那么主从复制就配置成功了。当然,可能还需要进行其他的配置,比如网络安全、防火墙等,以确保主服务器和从服务器之间的通信正常。
数据备份和灾难恢复:在从服务器上备份数据,以保证主服务器出现故障时能快速恢复数据;
负载均衡:可以将读操作分布到多个从服务器上,实现读写分离,从而减轻主服务器的负载;
高可用性:如果主服务器出现故障,可以将从服务器提升为主服务器,从而保证系统的高可用性。
数据分析:可以将复制的数据用于报告和分析。
虽然主从复制可以实现数据的备份和负载均衡等功能,但也存在一些限制和缺陷。例如,主从复制无法实现实时同步;从服务器上的数据可能存在延迟;主服务器出现故障时需要手动切换等。
以上是 MySQL 主从复制的基本配置步骤。完成这些步骤后,您可以使用主服务器更新数据库,并从从服务器上检索更新后的数据。