Mariadb 配置主从复制

838

前言

  • mariadb主从复制概述

    • 复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。
    • 一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器。
    • 主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表进行复制。
  • 主从复制解决的问题

    • 数据分布 (Data distribution )
    • 负载平衡(load balancing)
    • 备份(Backups)
    • 高可用性和故障转移(High availability and failover)
  • 主从复制如何工作

    • master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary logevents
    • slavemasterbinary log events拷贝到它的中继日志(relay log)
    • slave重做中继日志中的事件,修改salve上的数据。
    1. master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。Mariadb将事务写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
    2. slavemasterbinary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump processBinlog dump processmaster的二进制日志中读取事件,如果已经执行完master产生的所有文件,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
    3. 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_filemaster_log_pos对应master属性中的FilePosition

  • 查看是否配置成功
MariaDB [(none)]> show slave status\G

至此,主从服务搭建完毕,enjoy

后记

感谢这两位前辈的博客【mariadb配置主从复制搭建mariadb主从服务器实战数据热备】,没有他们付出就没有这篇博客。