MySQL主从复制
https://blog.51cto.com/u_16175461/11903860
1. 配置主服务器
修改配置文件my.cnf
[mysqld]
server-id=1 # 设置 id,这个可以是任意数字 log-bin=/mydata/log/master-bin # 启动 binlog 日志,名字必须是 log-bin sync_binlog=1 # 确保主从复制的事务安全
配置完成后重启数据库
sudo service mysql restart # 重启 MySQL 服务
2. 创建复制用户
连接到主服务器,并创建一个用于复制的用户账号:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; -- 创建复制用户 GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; -- 授权复制权限 FLUSH PRIVILEGES; -- 刷新权限
确保从服务器能够使用该用户连接到主服务器。
3. 配置从服务器
修改配置文件my.cnf
server-id=2 # 这个 id 随便给,但不要和 master 的一样 relay-log=/mydata/log/slave-relay # 这里是 relay-log 了,名字必须是 relay-log,备份的名字也就 slave-relay sync_binlog=1 read-only=ON # 开启只读模式,确保主备数据一致
保存并重启 MySQL 服务:
sudo service mysql restart # 重启 MySQL 服务
4. 启动复制
SHOW MASTER STATUS; -- 查看主服务器的二进制日志位置
假设输出显示如下:
+---------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------------+----------+--------------+------------------+ | mysql-bin.000001 | 154 | | | +---------------------+----------+--------------+------------------+
在从服务器上执行以下命令以启动复制:
CHANGE MASTER TO MASTER_HOST='主服务器IP', -- 替换为主服务器的 IP 地址 MASTER_USER='replica_user', -- 上面创建的复制用户 MASTER_PASSWORD='password', -- 复制用户密码 MASTER_LOG_FILE='mysql-bin.000001', -- 二进制日志文件名 MASTER_LOG_POS=154; -- 日志位置 START SLAVE; -- 启动复制
上述命令告诉从服务器从哪个主服务器及其位置开始复制数据。
5. 检查复制状态
确保复制工作正常,连接到从服务器并执行:
SHOW SLAVE STATUS\G; -- 显示从服务器的复制状态
检查 Slave_IO_Running 和 Slave_SQL_Running 是否为 Yes,表示复制正常。
通过监控状态,可以及时了解到复制是否正常工作。
6. 配置复制模式
异步复制:默认模式,数据写入主服务器后不等待从服务器确认。
半同步复制:
配置主服务器:
SET GLOBAL rpl_semi_sync_master_enabled=1; -- 启用半同步复制
配置从服务器:
SET GLOBAL rpl_semi_sync_slave_enabled=1; -- 启用半同步复制
全同步复制:需要使用外部工具实现(如 Galera Cluster),复杂度较高,通常不鼓励初学者使用。
总结
通过以上步骤,你已经成功配置了 MySQL 的主从复制功能。这有助于提高数据库的可用性和性能。请注意,随着数据量的增加,你可能需要考虑更复杂的复制架构和优化措施。同时,也要定期备份数据,确保数据安全。继续学习和实验,将有助于你成为一名优秀的数据库管理员!