Mysql主从双机备份
准备
Ubuntu 16.04.3。在digitalocean上设了两个VPS,Master_VPS & Slave_VPS。
安装MySql
123 sudo apt-get install mysql-serverapt install mysql-clientapt install libmysqlclient-dev如果过程中有出现找不到资源的情况,跟新apt-get.
1 apt-get update检查是否安装成功
12 root@Master:~# sudo netstat -tap | grep mysqltcp 0 0 localhost:mysql *:* LISTEN 3056/mysqld开启远程访问
注释掉bind-address=127.0.0.1这一行。
1 vi /etc/mysql/mysql.conf.d/mysqld.cnf进入mysql,修改权限。
1234 mysql -u root -p123456grant all privileges on *.* to '用户名'@'%' identified by '123456'flush privileges;exit;用户名我设为master和slave。(其实这一步和主菜没什么关系……)
重启mysql
1 /etc/init.d/mysql restart检查远程访问Mysql是否成功。
1 mysql -h IP -u master -p
到此为止准备工作完成,开始正餐。
一主一从
主从数据库技术应用非常广泛,也非常通用简单。可以合理分流,将大规模的Select操作分到Slave里,只留插入、修改的操作到Master。读写分离,负载均衡。
理论说明Master端
数据库设置
在Master_VPS中添加账号’MySlave1’,并且只允许Slave_VPS的IP登录
123 grant replication slave on *.* to 'MySlave1'@'SlaveIP' identified by '123456';flush privileges;exit;重启mysql
1 /etc/init.d/mysql restart要修改/etc/my.cnf文件。但是Mysql5.5以后就改变这个文件设计,有的人说,去吧my-medium.cnf复制到/etc/目录下,很不幸的告诉你,在MySql5.7里面,这个my-medium.cnf也被取消了。
不信你可以用
1 find / -name my-medium.cnf找找看啊。
仔细阅读安装mysql时显示的detail,你会发现my.cnf在etc/mysql/my.cnf。在这个文件末尾添加以下代码,打开binarylog功能
1234567891011 [mysqld]server-id = 1log-bin = mysql-logbinlog-do-db=Testbinlog-ignore-db=information_schemabinlog-ignore-db=mysqlbinlog-ignore-db=performance_schemaauto-increment-increment = 10auto-increment-offset = 1注意,这时我需要双机备份的数据库是Test,里面有一张user表,其他数据库变化我给忽略了。
重启mysql,进入后
1 show variables like '%log%';查看log_bin是否为on。
1 show master status\G查看日志记录情况。
同步数据库
锁定数据库
1 FLUSH TABLES WITH READ LOCK;导出数据库
1 mysqldump --master-data -uroot -p Test > Test.sql记住这个,然后解锁
1 UNLOCK TABLES
Slave端
数据库设置
1 /etc/mysql/my.cnf末尾加入
12345678910111213 [mysqld]server-id = 2log-bin = mysql-logbinlog-do-db=Testbinlog-ignore-db=information_schemabinlog-ignore-db=mysqlbinlog-ignore-db=performance_schemaauto-increment-increment = 10auto-increment-offset = 1relay_log=mysql-relay-binlog-slave-updates =ON用scp命令讲Master的Test.sql,传到Slave上。此时最好现在Slave的Mysql里建一个Test数据库再导入数据。
1 mysql -u root -p Test < Test.sql进入mysql,输入以下代码
123456 CHANGE MASTER TOMASTER_HOST='MasterIP',MASTER_USER='MySlave1',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-log.000002',MASTER_LOG_POS=154;查看slave进程有无启动
1 show slave status\G
如果你的Slave_IO_Running,Slave_SQL_Running显示是no,多半是Master没打开防火墙。
在master输入以下代码
1234 sudo apt-get install ufwsudo ufw enablesudo ufw default denysudo ufw allow from Slave'sIP然后重启Slave的MySql,即可。
检查
在Master_VPS中插入一些数据,查看确认。在Slave_VPS中查看,能看到新数据。
互主互从&一主多从
上面讲的是一主一从关系,意思就是说,Slave会copy Master的动作,但是Master不会Copy Slave的动作。单向热备份,但是你的BOSS要你双向备份呢?其实就是交换Slave和Master的身份,重复上面的步骤就可以了。
同理,一主多从也是很简单的。
操作都是一样的我也不多说了。
遇到困难看日志。在mysql中输入
1 show variables like '%log_error%';查看错误日志的地址,如查找出错的原因就可以了。