对于一直都是使用CUID的老鸟,开始一次不同的Mysql之旅,在此记录,以备后用。
简单介绍一下这次使用的背景。老鸟的公司目前依托阿里云和腾讯云构建公司核心的系统生态。 基于阿里云和腾讯云时不时断电断网,而且索赔麻烦,赔偿少等等赤裸裸的原因。特此需加强公司各服务的稳定性,尤其是数据层成为此次关注的重点。目前来说,数据库主从备份确实是现阶段公司可选的兼顾经济和系统安全的一个选项。
基于以上原因,在做产品备份前特此做了一次前期系统演练。Mysql数据库主从备份大体流程如下: 设置Master库 –> 设置Slave库 –> 做Slave备份配置 –> 启动备份程序(或线程)。 当然有很现实的情况是很多时候公司产品已经上线很久,那么在启动备份程序之前把主数据库的数据整体做一次初始化迁移。为了安全起见,可以在做备份配置之前做。理论上没有区别。
Mysql备份有多种:Binary Log 和 GUID。 抱歉不懂GUID,还未研究,哥懒。
具体请见官网文档:dev.mysql.com/doc/refman/…
一、系统环境以及必要依赖软件
- 操作系统: Ubuntu 16 LTS +
- 数据库: Mysql Community Server 5.7
- 服务器:阿里云服务器2台
二、设置Master(主) 数据库
我通过ubuntu的包管理器初始化安装Mysql。所以有两个重要的目录需要记录/etc/mysql和/var/lib/mysql。 如果手动安装或者其他操作系统安装,需要大家根据自己的情况做调整。
1) 找到mysql数据库配置文件,开启外网访问和日志追踪
- 进入/etc/mysql/mysql.conf.d/目录找到mysqld.cnf文件
- 用文本编辑器打开编辑该文件,如果权限不够,记得加sudo
- 注释掉“bind-address = 127.0.0.1”, 这样让你的数据库可以向外暴露。不然远程没办法访问到该数据库实例。当然如果你需要限制网络访问,请根据自己网络访问做其他设置。比如局域网内部访问使用。
- 找到下面两行注释,去掉它们的注释,让它们在配置中生效:
#server-id = 1
#log_bin =/var/log/mysql/mysql-bin.log- 保存提交
2) 重启数据库:
(sudo) service mysql stop
(sudo) service mysql start
3) 设置备份用户账号
备份用户账号用于Slave(从)数据库访问Master数据库拉取日志并操作备份时候使用。 该用户账号必须存在Master数据库中,并最后会配置到Slave数据库。如何配置请容我稍后介绍。
- 通过命令行连接Master数据库: mysql –u 用户名 –p
- 创建备份用户账号:CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
- 设置备份权限:GRANT REPLICATION SLAVE ON *.* TO '用户名'@'%';
三、设置Slave(从) 数据库
从数据库设置比较简单,基本只要赋予Server Id就好了。记住把所有主从数据库看作一个集群,这个集群里所有数据库的Server Id都不能一样也不能为0. 所以按自增顺序赋予就好。
1) 找到mysql数据库配置文件,开启外网访问和日志追踪
- 进入/etc/mysql/mysql.conf.d/目录找到mysqld.cnf文件
- 用文本编辑器打开编辑该文件,如果权限不够,记得加sudo
- 找到下面一行注释,去掉它的注释,并设置唯一值例如2,让它在配置中生效:
#server-id = 1这里需要跟Master数据库区分开来,Slave数据库并不需要开启log_bin. 当然你有多重备份(备份的备份)那就另说了。更复杂备份情况我不多说,因为我懒。
- 保存提交
2) 重启数据库:
- (sudo) service mysql stop
- (sudo) service mysql start
四、初始化数据备份迁移
这一步需要将已有的Master 里的数据迁移到Slave数据库中,类似与在程序运行前必须初始化好的状态。Mysql数据库备份也一样,需要在备份机制开始工作前,能够同步好主从数据库的初始化状态。 这里也有两条路,我选了mysqldump,不要问我为什么。还有一种是row base。
1) 备份Master数据库数据到文件:mysqldump –u 用户名 -p --all-databases --master-data > dbdump.db。 前面傻傻在Master所在服务器做了备份。后面发现可以通过mysqldump的-h选项指定远程数据库实例进行远程备份。老鸟心里苦啊!
2) 然后导入Slave 数据库: mysql –u 用户名 –p < dbdump.db
五、Slave备份配置
做配置前,需要了解Master日志的名称和记录初始位置。然后才能去Slave数据库做设置。
1) 获取Master 日志名称和初始化位置:
- 通过命令行连接Master数据库: mysql –u 用户名 –p
- FLUSH TABLES WITH READ LOCK;
- SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73 | test |manual,mysql |
+------------------+----------+--------------+------------------+- UNLOCK TABLES;
2) 通过SET MASTER TO命令设置备份配置:
- 通过命令行连接Slave数据库: mysql –u 用户名 –p
- 设置备份配置
mysql> CHANGE MASTER TO
-> MASTER_HOST='主数据库服务器IP地址',
-> MASTER_USER='备份用户用户名',
-> MASTER_PASSWORD='备份用户密码',
-> MASTER_LOG_FILE='上面获得的文件名称(File)',
-> MASTER_LOG_POS=上面获得的文件记录位置(Position);六、启动备份程序
在Slave 数据库命令行中执行: START SLAVE;就可以了。