MySQL 主从复制概述
MySQL 主从复制是一种数据复制技术,用于将一个 MySQL 数据库服务器(主库)的数据实时复制到一个或多个 MySQL 数据库服务器(从库)。这种机制常用于实现读写分离、负载均衡和数据备份等目的。
主从复制的基本步骤
- 配置主库:在主库上启用二进制日志,并创建一个具有复制权限的用户。
- 配置从库:在从库上设置主库信息,并启动复制进程。
- 验证复制状态:检查从库是否成功接收到主库的数据。
配置主库
1. 启用二进制日志
在 my.cnf
文件中添加以下内容:
[mysqld]
log-bin = mysql-bin
server-id = 1
然后重启 MySQL 服务以使配置生效。
2. 创建复制用户
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
3. 获取主库的二进制日志文件名和位置
SHOW MASTER STATUS;
输出示例:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
配置从库
1. 编辑从库的配置文件 my.cnf
在 my.cnf
文件中添加以下内容:
[mysqld]
server-id = 2
relay-log = relay-log
然后重启 MySQL 服务以使配置生效。
2. 设置从库的主库信息
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='replica_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
请将 master_host
替换为主库的实际 IP 地址或主机名,其他参数根据实际配置填写。
3. 启动从库的复制进程
START SLAVE;
4. 验证复制状态
SHOW SLAVE STATUS\G;
输出示例:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: master_host
Master_User: replica_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: relay-log.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 472
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: a8b9cdef-1234-5678-9abc-def012345678
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
主要关注以下几个字段:
Slave_IO_Running
: 应为Yes
。Slave_SQL_Running
: 应为Yes
。Seconds_Behind_Master
: 应为0
,表示没有延迟。Last_Error
: 应为空,表示没有错误。
常见问题及解决方法
1. 主从复制中断
如果 Slave_IO_Running
或 Slave_SQL_Running
显示 No
,可以使用以下命令重新启动复制进程:
STOP SLAVE;
START SLAVE;
2. 主从数据不一致
如果发现数据不一致,可以重新同步数据:
STOP SLAVE;
RESET SLAVE ALL; -- 清除所有复制状态信息
-- 然后重新执行 CHANGE MASTER TO ... 和 START SLAVE;
总结
通过上述步骤,您可以配置和管理 MySQL 的主从复制,实现数据的实时同步和高可用性。在实际生产环境中,建议定期监控复制状态,并做好备份和故障恢复措施。
标签:主从复制,Slave,Log,MySQL,SSL,Master,SQL,Last,揭秘 From: https://blog.csdn.net/Q2024107/article/details/143917290