MySQL主从数据库同步设置

楚天乐 5013 0 条

需求背景

我自己blog被墙,而我希望国内能正常访问,同时我自己写blog也不要太卡。刚好手头有一台国内闲置VPS。
所以决定这么折腾一下:

  1. 阿里云智能解析,境外访问解析到linode server; 国内访问,解析到腾讯云。
  2. 我日常写博客自然是写到linode server的数据库,我不可能手动同步俩数据库,所以设置数据库master slave吧

下面记录下如何设置master slave

找到数据库配置文件位置

找到mysql配置文件my.cnf的位置

# mysql --help|grep 'my.cnf'
....

本文假设配置文件位置:/etc/my.cnf

设置master

修改mysql配置文件/etc/my.cnf

  • 开启master模式,server-id=1
log-bin = mysql-bin   # 日志文件名称
server-id = 1         # 主数据库 ID = 1
binlog-do-db = game   # 只同步game数据库

# 忽略mysql,performance_schema和information_schema三个库
binlog-ignore-db = mysql           
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
  • 创建数据库同步账号。grant replication不能限制数据库,必须使用on .。我们通过修改mysql配置文件中的binlog-do-db来达到限制数据库的目的
# 登录数据库
# mysql -u root -p

# 创建slave账号
mysql>grant replication slave on *.* to 'slave_game'@'%' identified by '123456';

#使slave账号生效
mysql>flush privileges;
  • 重启mysql,查看当前master status
# 重启mysql
service mysqld restart

# 登录mysql
#mysql -u root -p

# 查看master status
mysql>show master status;

这地方比较关键 我截个图
master.png

ok 此时要保证mysql数据库不被改动了。否则会造成数据不同步。

  • 导出数据库
mysqldump -u root -p game > game.sql

设置slave

  • 建立同名数据库game,导入master那边备份的数据
mysqldump -u root -p game < game.sql
  • 修改mysql配置文件/etc/my.cnf
server-id = 2         # 从数据库端ID号

replicate-do-db = game   # 只同步game库

开启同步。这里就要用到上边那张图中的mysql-bin.000003和926566了。假设master ip:x.x.x.x, user是我们前面创建的slave_game,密码123456。

change master to master_host='x.x.x.x',master_user='slave_game',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=926566;
  • 启用slave
start slave
  • 查看slave状态
mysql> show slave status\G;

slave.png

测试

写篇blog看看能不能自动同步吧。还挺快的

MySQL主从同步总结

  1. 让master数据库静止,完成master-slave设置之前不再变。
  2. 设置master数据库相关参数
  3. 重启查看当前master数据库master status,说穿了就是当前数据库存储到某一位置的一个标记
  4. 把数据导入slave数据库
  5. 设置slave数据库参数
  6. 告诉slave当前master存储标记位置(3中获得)。此时,master处于存储状态P,slave也处于存储状态P,master和slave同步了。
  7. 开启slave

在这之后,master有新数据,存储位置P就会向前滚动,同时发通知给slave。slave用收到的通知和当前存储位置比对后,更新输出。此时master和slave又同时处于存储位置P+T。以此类推

遗留问题,数据库里的blog是自动同步了。可是博客里图片没有自动同步到腾讯云。稍后再解决吧



发表我的评论
昵称 (必填)
邮箱 (必填)
网址
执行时间: 1713611756298.3 毫秒