Mariadb数据库主从复制原理&实践技术文档

mariadb主从复制

【文章目录】

  • mariadb主从原理
  • 实战:mariadb主从配置

【mariadb 主从复制】

主从复制架构

mariadb主从复制概述:

复制解决的基本问题是让一台服务器的数据和另外的服务器保持同步。

一台主服务器可以连接多台从服务器,并且从服务器也可以反过来作主服务器。

主服务器和从服务器可以位于不同的网络拓扑中,还能对整台服务器、特定的数据库,甚至特定的表进行复制。

1.2 . 主从复制解决的问题

Mariadb复制技术有以下一些特点:

(1) 数据分布 (Data distribution )

(2) 负载平衡(load balancing)

(3) 备份(Backups)

(4)高可用性和故障转移 High availability and failover

1.3主从复制如何工作

图1
图2
图3
图4
图5
架构理解

mariadb主从复制中:

第一步: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 slave thread(SQL线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重新执行其中的事件而更新slave的数据,使其与master中的数据一致。

模式: C/S 模式

端口:3306


实战:实战mariadb主从配备

腾讯云配置:
主库:CenterOS7.5-64位  1核1G 系统盘:50GB 高性能云硬盘  内网IP:172.17.32.15
从库:CenterOS7.5-64位  1核1G 系统盘:50GB 高性能云硬盘  内网IP:172.17.32.13

( 主库)mariadb服务器配置

安装数据库:

[root@主库 ~]# yum install mariadb-server -y
[root@主库 ~]# systemctl  start  mariadb

创建要同步的数据库:

[root@主库 ~]# mysql -h 127.0.0.1  -u root -p  #连接数据库
或:
[root@主库 ~]#mysql
mariadb> create database db1;
mariadb> use db1;    
mariadb> create table test1 (id int,name char);    字段名  数据类型
mariadb> show tables;
desc  test1;    打印表结构

停止mariadb主服务

[root@主库 ~]# systemctl stop mariadb

配置mariadb主要同步的数据库名字并开启对应的二进制日志

#vim /etc/my.cnf                             # my.cnf 是mariadb 主配置文件
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0                  #在原配置文件中,添加以下内容(一定要写在mysqld标签后面一行,否则不生效):

log-bin=mariadblog 
server-id=1 
binlog-do-db=db1                   #这个不写的话,默认同步所有的库

注释:

log-bin=mariadblog #启用二进制日志,默认存在/var/lib/mariadb 下面

server-id=1 #本机数据库ID 唯一标示。

binlog-do-db=db1 #可以被从服务器复制的库。二进制需要同步的数据库名

主库my.conf配置图

重新启动

[root@主库 ~]# systemctl start mariadb

授权

mariadb> grant replication slave on *.* to slave@172.17.32.13 identified by "123456";

在从从库上测试登录:

[root@从库 ~]# mysql -h 172.17.32.15 -u slave -p123456

复制前保证主从两个数据库数据一致:

把主的原始数据传给从:

例:导出所有数据库:

[root@主库 ~]#mysqldump -u root -p  -A > all1.sql

参数:-A, --all-databases Dump all the databases.

[root@主库 /]# vim all.sql      #查看sql语句,导入数据时,会自动创建对应的数据库

数据库复制到从库上:

方法1:scp all1.sql 172.17.32.13:/root

在mariadb从服务器从库上导入:

[root@从库 ~]# yum install mariadb-server -y 安装
[root@从库 ~]# systemctl start mariadb
[root@从库 ~]# mysql -u root -p < all1.sql  #导入数据库,和主服务器保持一致
Enter password:                             #没有密码,直接回车
[root@从库 ~]# mysql
mariadb> show databases;
mariadb> use db1;
mariadb> show tables;

停服务

修改从服务器配置文件:

[root@从库 ~]# vim /etc/my.cnf

[mariadbd]
datadir=/var/lib/mariadb
socket=/var/lib/mariadb/mariadb.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 
            #在配置文件中写入以下内容
server-id=2 #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,
            #必须与主服务器的以及其它从服务器的不相同。可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。

启动服务

从服务器配置到主机的用户名和密码

主服务器上查看状态:

mariadb> show master status;
ERROR 2006 (HY000): Mariadb server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: db1
+-----------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mariadblog.000001 | 245 | db1 |  |

从库执行

MariaDB [(none)]> change master to master_host='172.17.32.15', master_user='slave', master_password='123456', master_port=3306, master_log_file='mariadblog.000001', master_log_pos=396, master_connect_retry=10;
MariaDB [(none)]> start slave; #启动从服务
MariaDB [(none)]> show slave status \G #查看从服务器状态
*************************** 1. row ***************************
 Slave_IO_State: Waiting for master to send event
 Master_Host: 172.17.32.15
  Master_User: slave
 Master_Port: 3306
 Connect_Retry: 10
 Master_Log_File: mariadblog.000001
 Read_Master_Log_Pos: 396
 Relay_Log_File: mariadb-relay-bin.000002
 Relay_Log_Pos: 530
 Relay_Master_Log_File: mariadblog.000001
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

查看从库状态,是否正常启动IO进程和slave进程
Slave_IO_Running: Yes #可以看到这两个Yes,说明从服务器安装成功。
Slave_SQL_Running: Yes
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mariadb进程

测试:数据同步

主库写数据:

mariadb> use db1;
Database changed
mariadb> show tables;
+--------------+
| Tables_in_db1 |
+--------------+
| test1 |
+--------------+
1 row in set (0.00 sec)
mariadb> insert into test1 values(1);

从库读数据:

mariadb> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mariadb> select * from test1;

从库db1表信息

在主库查看binlog日志

> show binlog events;

主库binlog日志记录

排错:

同步之前如果怀疑主从数据不同步可以采取:上面冷备份远程拷贝法或者在从服务器上命行同步方法。

总结:

1、 主从同步的原理

2、 主从同步的配置

3、 测试主从同步是否成功

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券