浪子玩了一把MySQL主从

384 阅读4分钟

业务场景

mysql主从其实我早就想做一次了,因为在一个小公司之前一直没有机会.最近因为历史代码写的糟糕了一点,导致mysql负载过高,所以领导允许做数据库主从了, 哈哈哈哈.(狗头保命)

因为之前看过一个mysql主从的视频,所以这次做起来总体比较顺利,当然还是遇到了一些问题滴.好了, 哔哔了一段, 下面进入正题~

国际惯例

1.什么是mysql主从

那么什么是mysql主从呢? 简单来说,就是有2台mysql服务器,我们往其中一个数据库新增修改数据的时候, 另一个数据库会同步更新.可以这么理解: 一个是老公, 一个是老婆. 老公发工资了, 会马上把工资转给老婆 :)

MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。

大致的原理图: alt

也就是开启主数据库的二进制日志,然后从数据库通过读取主数据库的二进制日志,恢复执行的SQL,然后再在从数据库上面执行一次.

具体操作步骤

  1. 第0步当然是分别安装2台mysql了.
  2. 编辑主mysql上面的配置文件/etc/my.cnf 配置在[mydqld]下面:
# 开启主mysql的二进制日志
log-bin=mysql-bin
#配置mysql实例中的全局唯一ID,必须大于0
server-id=1
#配置日志删除的时间,默认为0,表示不删除
expire_logs_days=7
#主从复制的类型,这个是混合类型,还有其他的类型,我们这里选择mixed
binlog_format=mixed
  1. 编辑从mysql上面的配置文件/etc/my.cnf 同样配置在[mysqld]下面:
#配置mysql实例中的全局唯一ID,必须大于0,不能重复
serever-id=2
  1. 在主mysql上面创建主从同步账号 进入mysql命令行界面,执行下面的SQL:
# 创建账号,账号和密码自己修改
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; 
# 给账号授权,我这里是给的所以权限,你们可以根据需求自己选择
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
  1. 给主mysql加锁,防止写入操作
mysql> FLUSH TABLES WITH READ LOCK;
  1. 在主mysql上面查看bin-log文件和位置
mysql> show master status;

执行了上面的命令,你看到的应该是类似于下面的界面: 图片里面的文件名mysql-bin.000002和Position1285很重要,下面会用到.

你执行命令看到的文件名和position可能跟我不一样,这个是根据你数据库的数据决定的,你按照你电脑上面显示的来用就行,不要完全copy我的

  1. 在主mysql上面dump出需要同步的数据库 这里根据业务需求,导出你需要的数据库. mysqldump命令是需要在操作系统的命令行里面执行的,所以需要退出mysql的命令行界面执行下面的命令:
mysqldump --all-databases --master-data > database.bak.sql -uroot -p
  1. 在从mysql上面导入之前dump的数据 注意,这里是在从 mysql上面操作了

这个命令是在操作系统的命令行里面执行的哦,不要弄错了哦.执行命令的时候注意命令里面的尖括号方向,< 这个是在操作系统命令行执行, >这个是在mysql的命令行里面执行

mysql < database.bak.sql -uroot -p

8.在从mysql上配置主从连接信息

mysql> CHANGE MASTER TO MASTER_HOST='10.1.1.191', 
  MASTER_PORT=3306,
  MASTER_USER='repl', 
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=1285;
  • MASTER_HOST: 主mysql ip地址
  • MASTER_PORT: 主mysql端口
  • MASTER_USER: 主数据库配置的同步账号名称
  • MASTER_PASSWORD: 主数据库配置的同步账号密码
  • MASTER_LOG_FILE: 上面我提醒的二进制日志名称
  • MASTER_LOG_POS: 二进制日志位置

这条命令至关重要, 能不能配置成功, 成败在此一举.我最开始就是在这里配置错误了导致第一次没有配置成功. 😳😳😳

  1. 在从mysql上面开启开启同步
mysql> start slave;

到此,我们mysql主从就算基本配置完成了 10. 在从mysql上面查看mysql主从状态 通过下面的命令,查看主从配置是否成功:

mysql> show slave status \G;

如果这两项都是Yes就表示成功啦!!!

  1. 最后,别忘记一件事情 我们刚刚锁住了主mysql,现在主mysql是插入不了数据的, 所以我们现在需要把主mysql的锁关掉. 进入主mysql执行:
mysql> unlock tables;

到此, 我们的mysql主从配置就算是完工啦~

希望这篇文章能帮助到你, 祝你成功~