数据库主从复制

#配置主库my.cnf配置文件

server-id = 1 #参数用于排除自带的数据库。
log-bin=mysql-bin
expire_logs_days = 10
max_binlog_size = 100M
binlog-format = ROW #二进制日志格式
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog-do-db=jxc-db-order
binlog-do-db=jxc-db-product
binlog-do-db=jxc-db-system
# 精准忽略系统库的所有表(不受 USE 语句影响)
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = information_schema.%
replicate-wild-ignore-table = performance_schema.%
# 精准同步指定业务库的所有表(推荐写法)
replicate-wild-do-table = jxc-db-product.%
replicate-wild-do-table = jxc-db-order.%
replicate-wild-do-table = jxc-db-system.%

保存并退出,然后重启 MySQL 服务:
sudo systemctl restart mysql


#配置从库my.cnf配置文件
server-id = 2
log-bin=mysql-bin
binlog_format= ROW
#read_only = 1 # 从库设置为只读模式(可选)
relay-log = /mnt/disk_two/mysql_db_data/mysql-relay-bin.log
expire_logs_days = 10
保存并退出,然后重启 MySQL 服务:
sudo systemctl restart mysql


#在主库上执行
#1.锁表并获取位置
mysql -uroot -p << EOF
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
-- 不要退出这个会话!
EOF

# 在另一个终端执行备份
mysqldump -u root -p \
--single-transaction \
--master-data=2 \
--routines \
--events \
--triggers \
--databases jxc-db-order jxc-db-product jxc-db-system \
--flush-logs \
> /tmp/master_dump.sql
# 回到第一个终端解锁

mysql -uroot -p

UNLOCK TABLES;

# 推送到从库
scp /tmp/master_dump.sql 用户名@从库IP:/tmp/


# 在从库服务器上
mysql -u root -p < /tmp/master_dump.sql

# 在从库服务器另一上输入 查看导入状态
SHOW PROCESSLIST;

#在主库上执行创建用于复制的用户账户
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_user666';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

# 在从库服务器上
head -n 50 /tmp/master_dump.sql | grep "CHANGE MASTER TO"
# 你会看到类似这样的信息(被注释掉了)
# CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1789;

# 进入数据库
mysql -u root -p

CHANGE MASTER TO
MASTER_HOST='主库IP地址',
MASTER_USER='repl_user', -- 你专门创建的复制用户
MASTER_PASSWORD='用户密码',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000003', -- 替换为实际值
MASTER_LOG_POS=1789; -- 替换为实际值
#启动从库复制进程
START SLAVE;
#检查从库状态
SHOW SLAVE STATUS\G;

确保以下两个参数都为 Yes:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


# 参数不都是yes时需要排除问题,从库重新配置:
STOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl_user',
MASTER_PASSWORD='密码',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.xxxxxx',
MASTER_LOG_POS=xxxx;
START SLAVE;

posted @ 2026-02-26 10:10  人生の短暂  阅读(10)  评论(0)    收藏  举报