两台服务器,分别作为主库(Master)和从库(Slave),均已安装 MySQL 5.7.33。
· 主从服务器之间网络可以正常通信。
主库(Master)配置
1. 编辑 MySQL 配置文件
打开主库的 MySQL 配置文件,一般是 /etc/my.cnf 或 /etc/mysql/my.cnf,添加或修改以下配置:
[mysqld]
# 服务器唯一 ID,范围 1 - 2^32 - 1
server-id = 1
# 开启二进制日志,用于记录主库的变更
log-bin = mysql-bin
# 选择要复制的数据库,多个数据库用逗号分隔
binlog-do-db = your_database_name
# 忽略复制的数据库# binlog-ignore-db = mysql
修改完成后,重启 MySQL 服务:
sudo systemctl restart mysqld
2. 创建用于主从复制的用户
登录到主库的 MySQL 控制台:
mysql -u root -p
在 MySQL 中创建一个用于主从复制的用户,并授予相应的权限:
-- 创建用户,% 表示允许从任意主机连接
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
3. 查看主库状态
在主库的 MySQL 控制台中执行以下命令,记录下 File 和 Position 的值:
SHOW MASTER STATUS;
示例输出:
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | your_database_name | | |
+------------------+----------+--------------+------------------+-------------------+
从库(Slave)配置
1. 编辑 MySQL 配置文件
打开从库的 MySQL 配置文件,添加或修改以下配置:
[mysqld]
# 服务器唯一 ID,与主库不同
server-id = 2
修改完成后,重启 MySQL 服务:
sudo systemctl restart mysqld
2. 配置从库连接主库
登录到从库的 MySQL 控制台:
mysql -u root -p
在从库的 MySQL 中执行以下命令,配置从库连接主库
CHANGE MASTER TO
MASTER_HOST='master_ip_address',
MASTER_USER='repl_user',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='mysql-bin.000001', -- 替换为主库 SHOW MASTER STATUS 中的 File 值
MASTER_LOG_POS=154; -- 替换为主库 SHOW MASTER STATUS 中的 Position 值
3. 启动从库复制进程
在从库的 MySQL 控制台中执行以下命令启动从库复制进程:
START SLAVE;
4. 检查从库状态
执行以下命令检查从库的复制状态:
SHOW SLAVE STATUS\G
确保 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes,表示从库复制正常工作。
测试主从复制****
在主库上创建一个测试数据库和表,并插入一些数据:
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO test_table VALUES (1, 'test');
在从库上检查是否能看到相同的数据库、表和数据:
SHOW DATABASES;
USE test_db;
SELECT * FROM test_table;
如果能看到相同的数据,说明主从复制搭建成功。
注意事项****
· 主从服务器的时间要保持一致,可以使用 NTP 服务进行时间同步。
· 如果主库已经有大量数据,需要先进行数据备份并恢复到从库,再进行主从复制配置。