Mariadb 配置主从复制
前言
-
mariadb
主从复制概述- 复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。
- 一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器。
- 主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表进行复制。
-
主从复制解决的问题
- 数据分布 (
Data distribution
) - 负载平衡(
load balancing
) - 备份(
Backups
) - 高可用性和故障转移(
High availability and failover
)
- 数据分布 (
-
主从复制如何工作
master
将改变记录到二进制日志(binary log
)中(这些记录叫做二进制日志事件,binary logevents
)slave
将master
的binary log events
拷贝到它的中继日志(relay log)slave
重做中继日志中的事件,修改salve
上的数据。
master
记录二进制日志。在每个事务更新数据完成之前,master
在二日志记录这些改变。Mariadb
将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master
通知存储引擎提交事务。slave
将master
的binary log
拷贝到它自己的中继日志。首先,slave
开始一个工作线程——I/O线程。I/O线程在master
上打开一个普通的连接,然后开始binlog dump process
。Binlog dump process
从master
的二进制日志中读取事件,如果已经执行完master
产生的所有文件,它会睡眠并等待master
产生新的事件。I/O线程将这些事件写入中继日志。SQL slavethread
(SQL线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave
的数据,使其与master
中的数据一致。
实战
本博客默认用户已经搭建好两个mariadb服务。并且注意,在搭建的过程中必须保证主机服务没有持续的数据写入,否则可能导致主从数据不一致!
master配置
- 修改/etc/my.cnf文件
[mysqld]
server-id=1
log_bin=master-bin
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=test
innodb_flush_log_at_trx_commit=1
binlog_format=mixed
注意:一定要将以上配置放在[mysqld]之下
- 添加备份的账号
此处命令需要进入主库中执行
通过命令
mysql -h127.0.0.1 -u root -p
连接主库
MariaDB [(none)]> grant replication slave on *.* to 'backup'@'%' identified by 'backupmima';
MariaDB [(none)]> flush privileges;
-
重启mariadb
如果是使用的安装方式安装的mariadb ,则推荐使用
systemctl restart mariadb
进行重启。 -
查看记录log_bin文件名和pos
MariaDB [(none)]> show master status\G
此处的File与Position属性后续会用到。
- 复制前保证主从两个数据库数据一致,将主库所有数据导出
mysqldump -u root -p -A > master-all.sql
slave配置
- 导入master内的所有数据
mysql -uroot -p < master-all.sql
此处需要输入从库的数据库密码
- 修改/etc/my.cnf文件
[mysqld]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
relay_log_recovery=1
-
重启mariadb
如果是使用的安装方式安装的mariadb ,则推荐使用
systemctl restart mariadb
进行重启。 -
配置slave
MariaDB [(none)]> stop slave;
MariaDB [(none)]> change master to
master_host='master IP',
master_user='backup',
master_password='backupmima',
master_log_file='master-bin.000002',
master_log_pos=43147982;
MariaDB [(none)]> start slave;
注意,此处的
master_log_file
与master_log_pos
对应master属性中的File
与Position
。
- 查看是否配置成功
MariaDB [(none)]> show slave status\G
至此,主从服务搭建完毕,enjoy
后记
感谢这两位前辈的博客【mariadb配置主从复制、搭建mariadb主从服务器实战数据热备】,没有他们付出就没有这篇博客。