环境:
qiudong 正在同步lcxm_backend,并且主库已经存在数据lcxm_backend 加入主从复制主库执行:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
增加数据库复制规则:
server-id=1
log-bin=mysql-bin
binlog-do-db=qiudong
binlog-do-db=lcxm_backend
保存。
Ubuntu:
sudo systemctl restart mysql
查看状态:
sudo systemctl status mysql
确认:
active (running)
进入 MySQL:
mysql -uroot -p
检查:
SHOW VARIABLES LIKE 'log_bin';
结果:
log_bin ON
检查复制过滤:
SHOW VARIABLES LIKE 'binlog_do_db';
应该包含:
qiudong,lcxm_backend
但是其实查不到:grep -r "binlog-do-db" /etc/mysql/
主库执行:
FLUSH TABLES WITH READ LOCK;
不要退出当前连接。
执行:
SHOW MASTER STATUS;
记录:
qiudong,lcxm_backend
| File | Position |
|---|---|
| bin-log.000924 | 157 |
记录:
SOURCE_LOG_FILE=bin-log.000924
SOURCE_LOG_POS=157
保持上面的锁。
打开新的 SSH 窗口。
执行:
mysqldump \
-uroot -p \
--single-transaction \
--databases lcxm_backend \
> /tmp/lcxm_backend.sql
回到第一个 MySQL 会话:
执行:
UNLOCK TABLES;
主库恢复正常。
主库执行:
scp /tmp/lcxm_backend.sql 用户名@从库IP:/tmp/
例如:
scp /tmp/lcxm_backend.sql ubuntu@192.168.1.20:/tmp/
登录从库:
ssh ubuntu@从库IP
导入:
mysql -uroot -p < /tmp/lcxm_backend.sql
检查:
SHOW DATABASES;
应该存在:
lcxm_backend
从库进入 MySQL:
mysql -uroot -p
停止复制:
STOP REPLICA;
设置新的复制位置:
CHANGE REPLICATION SOURCE TO
SOURCE_LOG_FILE='bin-log.000924',
SOURCE_LOG_POS=157;
替换成第二步记录的值。
START REPLICA;
查看状态:
SHOW REPLICA STATUS\G
重点:
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
如果:
Last_IO_Error:
Last_SQL_Error:
为空。
说明成功。
主库:
USE lcxm_backend;
CREATE TABLE test_sync(
id bigint primary key,
name varchar(50)
);
INSERT INTO test_sync VALUES(1,'hello');
从库:
USE lcxm_backend;
SELECT * FROM test_sync;
结果:
1 hello
说明新增数据库复制成功。
主库:
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
|
|
systemctl restart mysql
|
|
FLUSH TABLES WITH READ LOCK
|
|
SHOW MASTER STATUS
记录 File / Position
|
|
mysqldump lcxm_backend
|
|
UNLOCK TABLES
从库:
导入 lcxm_backend.sql
|
|
STOP REPLICA
|
|
CHANGE REPLICATION SOURCE TO
|
|
START REPLICA
|
|
SHOW REPLICA STATUS