简介
Centos8默认支持的是MariaDB,由于MySQL被收购后有闭源风险,目前社区志愿者开发了新分支Maria DB作为mysql的替代品,并在不断的维护更新。
主从分别采用阿里的两台服务器实现,一台的话本地再装一个Maria DB配其它端口(不能同时使用一个端口)
Master 182.92.225.189 3306 Centos MariaDB Server
Slave 101.200.83.151 3306 Centos MariaDB Server
需要知识:
- 数据库主从复制
- vim基本操作
主从复制原理
MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能.
在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。
MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
在进行数据库主从复制前,主数据库中已有表和数据,则这部分数据不会同步,需要手动导出,并在从数据库中导入以保证主从数据库的结构和数据一致。
主从配置大概流程
- 主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号 - 从服务器:
配置唯一的server-id(不同于主服务器的server-id)
使用master分配的用户账号读取master二进制日志
启用slave服务
配置过程
3.1 装MariaDB并初始化root,参考博客
两台机子都装,不过我之前都装好了
yum install mariadb-server #安装MariaDB
systemctl enable mariadb #开机启动Mariadb
systemctl start mariadb #启动Mariadb
mysql_secure_installation #首次初始化设置
1.回车后会要你输入数据库超级管理员root的密码,默认为空,回车即可
2.设置密码 Y 回车
3.新密码 回车
4.确认新密码 回车
5.删除测试账户 回车
6.拒绝root远程登录 回车
7.删除测试数据库 回车
8.重启服务 回车
3.2 配置主服务器数据库 Master
(1)修改数据库配置文件
[root@iZtZ1 ~]# vim /etc/my.cnf.d
选中mariadb-server.cnf进行编辑,
mariadb-server.cnf原来的部分内容
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld/mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
编辑好[mysqld]之后的内容
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mariadb/mariadb.log
pid-file=/run/mariadb/mariadb.pid
server-id = 1 #配置唯一id
log-bin = mysql-bin #开启二进制日志
还可以添加其它的配置,如
binlog-ignore-db = mysql #不需要主从复制的数据库
binlog-do-db = test #要主从复制的数据库,不写则备份整个数据库
配置好之后退出保存
(2)root登录数据库,建立slave通信用户
这里的slave拥有对test数据库的Replication Slave,Replication Client权限,若要主从复制全部数据库,则把test.*
修改为*.*
MariaDB [(none)]> grant Replication Slave,Replication Client on test.* to 'slave'@"101.200.83.151" identified by 'slave';
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> \q
Bye
(3)重启数据库服务
[root@iZtZ1 ~]# systemctl restart mysqld
(4)root登录数据库,查看二进制日志状态,记录文件名和位置,配置Slave的时候需要用到
MariaDB [(none)]>SHOW MASTER STATUS ;
3.3 配置从服务器数据库 Slave
(1)修改数据库配置文件
[root@iZtZ ~]# vim /etc/my.cnf.d
选中mariadb-server.cnf进行编辑
在[mysqld]字段末尾加上
server-id = 2
relay-log=mysql-relay
(2)重启数据库服务
[root@iZtZ]# systemctl restart mysqld
(3)root进入数据库配置slave到master的信息,两个位置需要用到上面的数据
这里的master_log_file和master_log_pos就是主数据库查出来的文件名和位置。
MariaDB [(none)]> change master to master_host='182.92.225.189',master_user='slave',master_password='slave',master_log_file='mysql-bin.000002',master_log_pos=342;
Query OK, 0 rows affected (0.010 sec)
(4)开启主从
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.000 sec)
MariaDB [(none)]> SHOW SLAVE STATUS \G;
如果**SHOW SLAVE STATUS \G;**之后出现的是方框内的两个Yes,说明连接成功,其它情况说明主从配置失败,请从头再来或者检查防火墙、安全组、IP、打错字母、中英文等等问题,可以参考文末的SQL、IO线程解决办法。
(我遇到的是有IO线程是connecting、SQL线程是Yes,这表明主从之间的连接没有成功,最后检查防火墙、安全组、IP。。是IP打错了。。。)
3.4 测试主从复制
在Master节点对数据库进行操作,例如新建数据库
打开Slave数据库进行查看,是否新建成功,没有的话进入Slave从机的数据库,查看slave状态
MariaDB [(none)]> SHOW SLAVE STATUS \G;
Error的话看参考2-2
Q&A
- 主从复制和数据库备份的关系,有主从还需要数据库备份吗?
- 假设主数据库和从数据库断开连接,比如主数据库断网宕机了半天才换好网线,重新连上网之后主数据库需要重新配置主从复制吗?
- 如何定时对数据库进行自动化操作,比如每个月自动增量备份数据库?每周自动检查数据库某项数据?
参考
- https://blog.csdn.net/weixin_43031092/article/details/105285140
- SQL、IO线程Error
- https://www.cnblogs.com/l-hh/p/9922548.html
- https://www.jianshu.com/p/f704af1deb5c