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
归类: 自动化运维及服务相关