MySQL主从复制(Replication)是一种数据复制技术,允许从一个MySQL服务器(主服务器)复制数据到一个或多个MySQL服务器(从服务器)。主从复制的主要用途包括:
假设我们有两台服务器: - 主服务器(Master): 192.168.1.100 - 从服务器(Slave): 192.168.1.101
两台服务器都已安装MySQL(建议5.6以上版本)。
1.1 修改主服务器配置文件(my.cnf/my.ini)
[mysqld]
server-id = 1 # 必须唯一,主从不能相同
log_bin = mysql-bin # 开启二进制日志
binlog_format = ROW # 推荐使用ROW格式
binlog_do_db = mydb # 可选,指定要复制的数据库
1.2 重启MySQL服务
# Linux
service mysql restart
# Windows
net stop mysql
net start mysql
1.3 创建复制专用用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
1.4 获取主服务器二进制日志状态
SHOW MASTER STATUS;
记录下File和Position的值,例如:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 107 | mydb | |
+------------------+----------+--------------+------------------+
2.1 修改从服务器配置文件(my.cnf/my.ini)
[mysqld]
server-id = 2 # 必须唯一,不能与主服务器相同
relay-log = mysql-relay-bin # 中继日志
read_only = 1 # 从服务器只读(可选)
2.2 重启MySQL服务
# Linux
service mysql restart
# Windows
net stop mysql
net start mysql
2.3 配置从服务器连接主服务器
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
2.4 启动复制
START SLAVE;
2.5 检查复制状态
SHOW SLAVE STATUS\G
查看以下两个字段是否为"Yes": - Slave_IO_Running: Yes - Slave_SQL_Running: Yes
如果有错误,可以在错误日志中查看详细信息。
在主服务器上执行:
CREATE DATABASE test_repl;
USE test_repl;
CREATE TABLE test_table (id INT, name VARCHAR(20));
INSERT INTO test_table VALUES (1, 'test data');
在从服务器上检查:
SELECT * FROM test_repl.test_table;
应该能看到主服务器上插入的数据。
Slave_IO_Running: Connecting
Slave_SQL_Running: No
跳过错误
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
半同步复制
GTID复制
多线程复制
通过以上步骤,您应该已经成功设置了MySQL主从复制环境。