MySQL架构备份之双机热备
M--S架构:实现双机热备(AB复制)
1、可以降低master读压力
2、可以对数据库做“热备”,热备只能解决硬件master硬件故障,软件故障等重大故障问题,但无法解决人为误操作导致的逻辑故障(列如输入错误的SQL语句把重要的记录删除了),所以常规的备份是必须。
环境准备及要求:
1、关闭防火墙和selinux
2、hosts文件中两台服务器主机名和ip地址一一对应起来
3、系统时间需要同步
4、master和slave的数据库版本保持一致(系统版本保持一致)
思路:
1、master必须开启二进制日志
2、slave必须开启中继日志
3、master和slave的server-id必须不一样 范围(2^23-1)
4、master和slave的初始数据一致
M--S架构操作步骤#
环境:
master:192.168.1.101
slave:192.168.1.102
1、环境准备
1 # master: 2 [root@master ~]# vim /etc/hosts 3 192.168.1.102 slave 4 5 # slave: 6 [root@slave ~]# vim /etc/hosts 7 192.168.1.101 master
2、修改配置文件
1 # master: 2 root@master ~]# vim /etc/my.cnf 3 log-bin=mysql-bin 4 server-id = 1 5 6 # slave: 7 [root@slave ~]# vim /etc/my.cnf 8 server-id = 2 9 relay-log=/data/DB/relay.log
1 # 扩展说明:有时候,我们只是想master向slave上面同步某一个库,那么就可以使用下面的参数,同样是加在/etc/my.conf配置文件里面: 2 binlog-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可 3 binlog-ignore-db=不需要复制的数据库苦命,如果复制多个数据库,重复设置这个选项即可 4 5 6 示例: 7 master的/etc/my.conf 8 server-id = 1 9 log-bin=mysql-bin #设定生成的log文件名; 10 binlog-do-db=demo #需要同步的二进制数据库名; 11 binlog-ignore-db=information_schema #不同步的二进制数据库名,如果不设置可以将其注释掉; 12 binlog-ignore-db=mysql 13 binlog-ignore-db=performance_schema 14 binlog-ignore-db=test 15 log-slave-update #把更新的记录写到二进制文件中; 16 17 slave的/etc/my.conf 18 server-id = 2 # 如果有多个 依次添加即可,不能相同 19 log-bin=mysql-bin 20 relay-log=/data/DB/relay.log 21 # 如果想要做级联架构,也就是master复制到slave上面,slave再复制到slave2上面,同样在slave上面也可以控制需要复制的数据库, 22 replicate-ignore-db=mysql 23 replicate-do-db=demo 24 log-slave-update # 级联 中级slave必须开启此参数 25 26 # MySQL主从复制参数大全 参考:https://www.cnblogs.com/qianniao12/p/8011222.html
3、数据初始化一致
情况1:两边都没有业务数据,直接初始化master和slave的数据库
情况2:master上面有业务数据
1 masteer: 2 1>停止数据库 3 [root@master ~]# /etc/init.d/mysqld stop 4 5 2>物理级别备份 6 [root@master ~]# cd /data/DB/ && ll 7 [root@master DB]# tar -cvzf /tmp/mysql.tar.gz * 8 [root@master DB]# scp /tmp/mysql.tar.gz 192.168.1.114:/tmp 9 10 slave: 11 3>slave端进行数据恢复 12 [root@slave ~]# cd /data/DB/ && ll 13 [root@slave DB]# tar -xf /tmp/mysql.tar.gz -C . 14 [root@slave DB]# /etc/init.d/mysqld start 15 16 master和slave: 17 4>查看slave和master上面的数据是否一样 18 [root@master DB]# echo "show databases;" | mysql -p123 19 [root@slave DB]# echo "show databases;" | mysql -p123
4、在master上面创建授权用户及查看binlog信息
1 master: 2 1>锁表,先加锁,防止两边数据不一致;如果业务还未上线,这个就没有必要了 3 mysql> flush tables with read lock; 4 5 2>创建授权用户 6 mysql> grant replication slave on *.* to 'slave'@'192.168.1.102' identified by 'admin123'; 7 8 3>查看binglog信息,只有打开二进制日志,这句命令才有结果,表示当前数据库的二进制日志写到什么位置 9 mysql> show master status\G 10 *************************** 1. row *************************** 11 File: mysql-bin.000003 12 Position: 331 13 Binlog_Do_DB: 14 Binlog_Ignore_DB: 15 Executed_Gtid_Set: 16 1 row in set (0.02 sec) 17 # 注意:此时千万不要往里面写东西
5、在slave上配置同步信息
1 slave: 2 mysql> change master to master_host='192.168.1.101', master_user='slave', master_password='admin123', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=331; 3 参数说明: 4 master_host: master ip 5 master_user: 同步用户 6 master_password: 密码 7 master_port: 端口 8 master_log_file: master上面查看到的二进制日志名 9 master_log_pos: master上面查看到的POS值 10 11 mysql> show slave status \G 12 查看slave发现报错 13 解决: 14 1.检查配置文件里server-id是否不一致 15 2.检查数据目录里的auto.cnf文件的uuid是否一样,如果一样将slave中的auto.cnf删除后将master和slave的服务重启。 16 17 mysql> show slave status \G; 18 Slave_IO_Running: Yes 19 Slave_SQL_Running: Yes
归类: 自动化运维及服务相关