为了区分我把被复制的服务器称为主服务器,要去复制的称为次服务器
1.在主服务器上进行配置:
- 打开MySQL配置文件(通常是
/etc/my.cnf
)。 - 确保以下参数已启用或添加到配置文件中:
[mysqld] server-id=1 log-bin=mysql-bin
server-id
可以是唯一的正整数,标识主服务器。log-bin
启用二进制日志记录,用于记录主服务器上的写操作。- 重启MySQL服务以使配置更改生效。
2.在次服务器上进行配置:
- 打开MySQL配置文件。
- 确保以下参数已启用或添加到配置文件中:
[mysqld] server-id=2 relay-log=mysql-relay-bin read_only=1
server-id
是次服务器的唯一标识。relay-log
是用于存储从主服务器接收的日志的文件名。read_only
设置为1,以确保次服务器只允许读取操作。- 重启MySQL服务。
3.在主服务器上创建用于复制的用户:
- 连接到主服务器的MySQL命令行界面。
- 执行以下命令创建一个新用户,并授予复制权限:
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%'; FLUSH PRIVILEGES;
替换
'replication_user'
和'password'
为您自定义的用户名和密码。
4.在次服务器上启动复制进程:
先在次服务器上测试是否成功连接上了主服务器
mysql -h 主服务器ip -u 用户名 -p
如果输出的是
Welcome to the MySQL monitor...
mysql>
则代表连接成功,如果没成功检查主服务器是否开放端口
- 连接到次服务器的MySQL命令行界面。
- 执行以下命令开始复制进程:
STOP SLAVE; -- 如果复制进程已经在运行,先停止它 CHANGE MASTER TO MASTER_HOST='主服务器IP地址', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='主服务器上的二进制日志文件名', MASTER_LOG_POS=0; START SLAVE; -- 启动次服务器的复制进程
- 替换
'主服务器IP地址'
、'replication_user'
、'password'
和'主服务器上的二进制日志文件名'
为实际的值。主服务器上的二进制日志文件名可以通过SHOW MASTER STATUS;来查看
1.先登录mysqlmysql -u root -p
输入密码后在mysql>后输入
SHOW MASTER STATUS;
显示的就是
主服务器上的二进制日志文件名
和MASTER_LOG_POS了 - 使用
SHOW SLAVE STATUS\G
命令来检查复制进程的状态,确保
Slave_IO_Running
和Slave_SQL_Running
都显示为Yes
。
如果是图片的这样则成功
如果只想复制 db_test数据库中的特定表user,可以使用 MySQL 复制过滤器来实现。
停止次服务器的复制进程。在次服务器上执行以下命令:
STOP SLAVE;
修改次服务器的配置文件。打开次服务器上的 MySQL 配置文件(my.cnf)
[mysqld]
replicate-wild-do-table=db_test.user
replicate-wild-do-table=db_test.table1
然后重新执行复制的代码即可
STOP SLAVE; -- 如果复制进程已经在运行,先停止它
CHANGE MASTER TO MASTER_HOST='主服务器IP地址', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='主服务器上的二进制日志文件名', MASTER_LOG_POS=0;
START SLAVE; -- 启动次服务器的复制进程