首页 » 后端 » MySQL/MariaDB » 正文

MySQL 主从同步

发布者:站点默认
2011/04/19 浏览数(1,343) 分类:MySQL/MariaDB MySQL 主从同步已关闭评论

主库服务器

启用同步

vim /etc/my.cnf

[mysqld]
server-id=1                      # 主库ID(唯一,建议1-100)
log-bin=mysql-bin                # 开启binlog(日志文件前缀)
binlog_format=ROW                # 行级binlog(同步精度最高)
sync_binlog=1                    # 确保binlog实时写入磁盘
innodb_flush_log_at_trx_commit=1 # 事务提交时立即刷盘
binlog_do_db = business_db1  # 第一个业务库 只同步指定数据库(可选,没有则同步所有,包括 msyql)
binlog_do_db = business_db2  # 第二个业务库
binlog_do_db = business_db3  # 第三个业务库(可继续添加)
systemctl restart mysqld

创建同步帐号

mysql -uroot -p'主库密码'
CREATE USER 'sync'@'从库IP' IDENTIFIED BY '同步密码';
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'从库IP';
FLUSH PRIVILEGES;

导出数据

mysqldump -uroot -p'主库密码' \
  --single-transaction \  # InnoDB引擎保证一致性,不锁表
  --master-data=2 \       # 记录导出时的binlog位置(在导出的 SQL 文件中添加 CHANGE MASTER TO 语句)
  --flush-logs \          # 刷新binlog,生成新日志文件
  -B business_db1 business_db2 business_db3  > /tmp/dbs4sybc.sql  # -B 指定数据库,导出建库语句
scp /tmp/dbs4sybc.sql root@从库IP:/tmp/

开启防火墙

# firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="从库IP" port protocol="tcp" port="3306" accept'
firewall-cmd --reload

从库服务器

导入数据

mysql -uroot -p'从库密码' < /tmp/dbs4sybc.sql

启用同步

vim /etc/my.cnf

[mysqld]
server-id = 2                # 从库ID,必须和主库不同
relay-log = mysql-relay-bin  # 中继日志
log_slave_updates = 1        # 可选:从库记录自身binlog
read_only = 1                # 从库只读(管理员仍可操作)
systemctl restart mysqld
mysql -uroot -p'从库密码'
# 1. 停止现有同步(如果有)
STOP SLAVE;

# 2. 查看导出的SQL文件,找到同步起始位置
# cat /tmp/dbs4sybc.sql | grep "CHANGE MASTER TO"
# 输出:CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=156;

# 3. 配置主从同步(替换为实际的binlog信息和主库信息)
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='sync',                  # 之前创建的同步账号
MASTER_PASSWORD='同步密码',
MASTER_LOG_FILE='mysql-bin.000005',  # 导出文件中的binlog文件名
MASTER_LOG_POS=156;                  # 导出文件中的binlog位置

# 4. 启动同步
START SLAVE;

# 5. 检查同步状态(Slave_IO_Running 和 Slave_SQL_Running 状态两个Yes表示正常)
SHOW SLAVE STATUS\G;
点击返回顶部
  1. 留言
  2. 联系方式