M–S架构:实现双机热备(AB复制)
1、可以降低master读压力
2、可以对数据库做“热备”,热备只能解决硬件master硬件故障,软件故障等重大故障问题,但无法解决人为误操作导致的逻辑故障(列如输入错误的SQL语句把重要的记录删除了),所以常规的备份是必须。
环境准备及要求:
1、关闭防火墙和selinux
2、hosts文件中两台服务器主机名和ip地址一一对应起来
3、系统时间需要同步
4、master和slave的数据库版本保持一致(系统版本保持一致)
原理:
1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,
这些记录叫做二进制日志事件(binary log events);2、Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继日志(relay log);
3、Slave 重做中继日志中的事件, 把中继日志中的事件信息一条一条的在本地执行一次,完 成数据在本地的存储,
从而实现将改变反映到它自己的数据(数据重放)。
思路:
1、master必须开启二进制日志
2、slave必须开启中继日志
3、master和slave的server-id必须不一样 范围(2^23-1)
4、master和slave的初始数据一致
简要配置思路:
Master 上的配置
1.安装数据库;
2.修改数据库配置文件, 指明 server_id, 开启二进制日志(log-bin);
3.启动数据库, 查看当前是哪个日志, position 号是多少;
4.登录数据库, 授权数据复制用户(IP 地址为从机 IP 地址, 如果是双向主从, 这里的还需要授权本机的 IP 地址, 此时自己的 IP 地址就是从 IP 地址);
5.备份数据库(记得加锁和解锁);
6.传送备份数据到 Slave 上;
7.启动数据库;
以下步骤, 为单向主从搭建成功, 想搭建双向主从需要的步骤:
1.登录数据库, 指定 Master 的地址、 用户、 密码等信息(此步仅双向主从时需要);
2.开启同步, 查看状态;
Slave 上的配置
1.安装数据库;
2.修改数据库配置文件, 指明 server_id(如果是搭建双向主从的话, 也要开启二进制
日志 log-bin);
3.启动数据库, 还原备份;
4.查看当前是哪个日志, position 号是多少(单向主从此步不需要, 双向主从需要);
5.指定 Master 的地址、 用户、 密码等信息;
6.开启同步, 查看状态。
M–S架构操作步骤#
环境:
master:10.1.118.38
slave:10.1.118.2
1. 修改配置文件
# master:
root@master ~]# vim /etc/my.cnf
log-bin=mysql-bin
server-id = 1
# slave:
[root@slave ~]# vim /etc/my.cnf
server-id = 2
relay-log=/data/DB/relay.log
如果relay-log=/data/DB/relay.log 路径没有 则新建
配置完成后,重启mysql
2. 在master上面创建授权用户及查看binlog信息
master:
1>锁表,先加锁,防止两边数据不一致;如果业务还未上线,这个就没有必要了
mysql> flush tables with read lock;
创建用户
每个从库使用MySQL用户名和密码连接到主库,因此主库上必须有用户帐户,从库可以连接。任何帐户都可以用于此操作,只要它已被授予 REPLICATION SLAVE权限。可以选择为每个从库创建不同的帐户,或者每个从库使用相同帐户连接到主库
虽然不必专门为复制创建帐户,但应注意,复制用到的用户名和密码会以纯文本格式存储在主信息存储库文件或表中 。因此,需要创建一个单独的帐户,该帐户只具有复制过程的权限,以尽可能减少对其他帐户的危害。
主库上创建主从复制账号
创建用户【MySQL8.0.11和之前不一样,语法有区别】
必须先创建用户,授予权限
密码规则:mysql8.0以上密码策略限制必须要大小写加数字特殊符号):
再进行赋值:
mysql>
mysql> create user 'slave'@'%' identified by '1qaz@WSX';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> grant all privileges on slave.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> grant replication slave on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 1508
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
# 注意:此时千万不要往里面写东西
ERROR:
No query specified
mysql>
按道理来说,应该如下图这样配置,指定相应的slave的IP , 但是会报错
mysql> grant replication slave on *.* to 'slave'@'10.1.118.2';
ERROR 1410 (42000): You are not allowed to create a user with GRANT
mysql>
3. 在slave上配置同步信息
从库中不创建slave数据库
mysql>
mysql> change master to master_host=&#