MariaDB的主从备份

文章目录

      • 1.MariaDB和MySQL的主从复制原理
      • 2.Master-slave服务器配置
      • 3.构建主从复制
      • 4.同步master历史数据
      • 5. 启动主从同步
      • 6. 停止并删除主从同步

1.MariaDB和MySQL的主从复制原理

本文介绍基于安装在两台linux服务器上的MariaDB介绍,master(192.168.159.100)中已经有历史数据,启动主从复制前需要做完整备份,slave(192.168.159.101)

MariaDB和MySQL有两种主从复制方式:

  • 传统方式:基于主库的bin-log将日志事件和事件位置复制到从库,从库再加以应用
  • Gtid方式:基于GTID的复制中,从库会告知主库已经执行的事务的GTID的值,然后主库会将所有未执行的事务的GTID的列表返回给从库,并且可以保证同一个事务在指定的从库执行一次。

这里主要介绍基于bin-log的方式,原理:

  • 配置主从复制后,只要我们对Master节点进行了写操作,这个操作将会保存到MariaDB的binary-log(bin-log)日志当中,当slave连接到master的时候,master机器会为slave开启binlogdump线程。当master的bin-log发生变化的时候,master的dump线程会通知slave,并将相应的bin-log内容发送给slave。而slave节点在主从同步开启的时候,会创建两个线程,一个I/O线程,一个SQL线程。
  • I/O线程:该线程连接到master机器,master机器的binlog发送到slave的时候,IO线程会将该日志写在本地的中继日志(relay-log)中。
  • SQL线程:该线程读取中继日志中的内容,并且根据中继日志中的内容对slave数据库做相应操作。
  • 可能造成的问题:在写请求相当多的情况下,可能造成slave数据和master数据不一致的情况,这是因为日志传输过程中的有延迟。

2.Master-slave服务器配置

  1. 修改master(192.168.159.100)/etc/my.conf文件,增加如下配置
]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=maria
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=maria-bin 
server-id=100
binlog_format=mixed

# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
  1. 修改slave(192.168.159.101)/etc/my.conf文件,增加如下配置
]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=maria
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-bin=maria-bin
server-id=101
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
  1. 修改配置后重启Master和Slave的mariadb服务
[root@cdh001 ~]# systemctl restart mariadb.service

3.构建主从复制

  1. 在master主MariaDB上创建一个mysync用户,用户名:mysync 密码:mysync,从节点也做相同配置,方便以后从master远程同样使用mysync用户访问slave
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.159.%' IDENTIFIED BY 'mysync'; 
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
  1. 查看Master上MariaDB二进制日志File与Position
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| maria-bin.000001 |     2090 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
  1. 在Slave从MariaDB上执行如下SQL,注意配置参数和2中的值要对应,每个人的都不一样
MariaDB [(none)]> change master to
    -> master_host='192.168.159.100',
    -> master_user='mysync',
    -> master_password='mysync',
    -> master_log_file='maria-bin.000001',
    -> master_log_pos=2090;
Query OK, 0 rows affected (0.01 sec)

4.同步master历史数据

主数据库中的数据如果可有可无,那么就可以不用处理,如果是重要数据,就需要在启动主从备份前先将数据完整备份到从数据库,使主从保持数据一致。

  1. 锁定主数据库,防止备份过程中数据写入
MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
  1. 新开一个会话窗口,通过Maria主服务器上的全备初始化从服务器上数据
[root@cdh001 /]# mkdir -p /data/db_backup
[root@cdh001 /]# cd /data/db_backup
[root@cdh001 db_backup]# mysqldump -uroot -p --master-data=1 --single-transaction --routines --triggers --events --all-databases >all.sql
Enter password: 
[root@cdh001 db_backup]# ls
all.sql
  1. 解锁主数据库
MariaDB [(none)]> unlock tables;
Query OK, 0 rows affected (0.00 sec)

  1. 把数据全量导入slave数据库
    可以将/data/db_backup/all.sql复制到slave节点执行就可以了,我刚开始使直接在主节点远程连接slave的MySQL,source /data/db_backup/all.sql 报错,然后我直接把all.sql拖到本地navicat中连接的slave中的MariaDB中执行成功了。如图可以看到主从数据一致了
    MariaDB的主从备份_第1张图片

5. 启动主从同步

在Slave从MariaDB上执行命令,启动同步并查看状态,以下两个参数为yes则表示主从复制构建成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这时在master上执行的操作就会同步到slave上了

MariaDB [mysql]> start slave;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> show slave status \G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.159.100
                  Master_User: mysync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: maria-bin.000001
          Read_Master_Log_Pos: 92985
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 68546
        Relay_Master_Log_File: maria-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 92985
              Relay_Log_Space: 68842
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 100
1 row in set (0.00 sec)

6. 停止并删除主从同步

在slave的MariaDB上执行以下操作后重启MariaDB

stop slave;
reset slave;

你可能感兴趣的:(大数据,mysql,mariadb)