MariaDB数据库主从复制实现步骤

一.MariaDB简介

MariaDB数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上.
MariaDB数据库支持单向、双向、链式级联等不同业务场景的复制.在复制的过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器数据达到一致.
主从复制的逻辑有以下几种:
1)一主一从,单向主从同步模式,只能在Master端写入数据;

2)一主多从,

3)双主复制逻辑架构,此架构可以在Master1或Master2进行数据写入,或者两端同时写入(特殊设置);

在生产环境中,MySQL主从复制都是异步的复制方式,即不是严格的实时复制,但是给用户的体验都是实时的.MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份.

二.应用场景

利用复制功能当Master服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致.复制功能也可用作数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了.

三.主从机制实现原理

(1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)slave将master的binary log events拷贝到它的中继日志(relay log);
(3)slave重做中继日志中的事件,将改变反映它自己的数据;

四.主从实验步骤

主库配置

1.查看数据库状态

systemctl status mariadb

2.停止mariadb

systemctl stop mariadb

3.修改配置文件

vi /etc/my.cnf
# 修改内容如下:
# server-id服务的唯一标识(主从之间都必须不同);
# log-bin启动二进制日志名称为mysql-bin
[mysqld]
server-id=1
log-bin=apollo-mysql-bin

4.重启mariadb

systemctl start mariadb

5.新建用于主从同步的用户apollo

[[email protected] etc]# mysql -uroot -p

MariaDB [mysql]> create user 'apollo'@'%' identified by 'apollo123';
Query OK, 0 rows affected (0.00 sec)

6.如果提示密码太简单不符合策略加在前面加这句,否则可以忽略.

mysql> set global validate_password_policy=0;

7.给从库账号授权

MariaDB [mysql]> grant replication slave on *.* to 'apollo'@'%';
Query OK, 0 rows affected (0.00 sec)

8.检查主库创建的复制账号

MariaDB [(none)]> select user,host,password from mysql.user;
+--------+-----------------------+-------------------------------------------+
| user   | host                  | password                                  |
+--------+-----------------------+-------------------------------------------+
| root   | localhost             | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root   | localhost.localdomain | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root   | 127.0.0.1             | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root   | ::1                   | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| apollo | %                     | *F4C3606BB4D20E38BDAC60DD383666A1F3D72A67 |
+--------+-----------------------+-------------------------------------------+
6 rows in set (0.00 sec)

9.检查授权账号的权限

MariaDB [(none)]> show grants for [email protected]'%';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]%                                                                                               |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'apollo'@'%' IDENTIFIED BY PASSWORD '*91310B9B3DD9D3B34E510A8C8BEE1096516C0C94' |
+-----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

10.实现对主数据库锁表只读,防止数据写入,数据复制失败.

MariaDB [mysql]> flush table with read lock;
Query OK, 0 rows affected (0.02 sec)

11.检查主库的状态

MariaDB [(none)]> show master status;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| a-mysql-bin.000001 |      615 |              |                  |
+--------------------+----------+--------------+------------------+
1 row in set (0.01 sec)

# File是二进制日志文件名,
# Position是日志开始的位置,后面从库会用到.

12.锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据.

[[email protected] ~]# mysqldump -uroot -p --all-databases > /opt/root.sql

13.确保数据导出后,没有数据插入,完毕再查看主库状态.

MariaDB [(none)]> show master status;
+--------------------+----------+--------------+------------------+
| File               | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| a-mysql-bin.000001 |      615 |              |                  |
+--------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

14.将备份导出的数据scp至Slave数据库

[[email protected] ~]# scp /opt/zdk.sql [email protected]:/opt/

The authenticity of host '192.168.13.183 (192.168.13.183)' can't be established.
ECDSA key fingerprint is SHA256:inppMYl6FXIzV/XOV6TTlSUmP4TY96mz6sujwtTY7nk.
ECDSA key fingerprint is MD5:69:b7:4c:cc:18:86:94:be:d9:63:4d:4c:cb:62:fa:67.
# 输入yes
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.13.183' (ECDSA) to the list of known hosts.
# 输入数据库密码
[email protected]'s password:
zdk.sql         100%    467KB   5.0MB/s 00:00    

从库设置(192.168.13.183)

1.此时去从库的mysql上,登录,导入主库的数据,保持数据一致性.

mysql -uroot -p
source /opt/root.sql

# 这一步完成后,再登录数据库,如出现密码不正确,请输入主库数据库密码.

2.查看数据库状态

systemctl status mariadb

3.停止mariadb

systemctl stop mariadb

4.从库的配置,写入my.cnf,从库的身份信息

vi /etc/my.cnf
[mysqld]
server-id=10

5.检查一下主库和从库的参数信息

主库:
MariaDB [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
从库:
MariaDB [(none)]> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 10    |
+---------------+-------+
1 row in set (0.00 sec)

MariaDB [(none)]> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | OFF   |
+---------------+-------+
1 row in set (0.01 sec)

6.通过一条命令,开启主从同步

# 主库IP地址:'192.168.13.189'
# 如果以下信息不知道,可以通过命令show master status;
change master to master_host='192.168.13.189',
master_user='apollo',
master_password='apollo123',
master_log_file='a-mysql-bin.000001',
master_log_pos=615;
MariaDB [(none)]> change master to master_host='192.168.13.189',
    -> master_user='apollo',
    -> master_password='apollo123',
    -> master_log_file='a-mysql-bin.000001',
    -> master_log_pos=615;
Query OK, 0 rows affected (0.05 sec)

7.查看主从同步的状态

show slave status\G; 

8.开启从库的slave同步

start slave; 

9.再次查看主从同步的状态

show slave status\G; 

# 查看两条参数,确保主从正常
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

10.解锁主库,恢复可写

MariaDB [(none)]> unlock tables;
Query OK, 0 rows affected (0.00 sec)

11.主库创建一个数据库db2

# 这个是在主库里面执行的哦
MariaDB [(none)]> create database db2;
Query OK, 1 row affected (0.00 sec)

12.去从库里面查看数据库中是否有db2

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| db1                |
| db2                |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
5 rows in set (0.00 sec)

五.总结

暂时没啥好总结的,就先按照上面的步骤进行吧!如有问题,后续更正!

原文地址:https://www.cnblogs.com/apollo1616/p/10314806.html

时间: 2024-10-07 10:27:53

MariaDB数据库主从复制实现步骤的相关文章

Mac中MariaDB数据库的安装步骤

前言 MariaDB由MySQL的创始人Michael Widenius主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中.MariaDB名称来自Michael Widenius的女儿Maria的名字.那么在Mac中如何安装MariaDB数据库呢?下面小编就给大家介绍Mac中安装配置MariaDB数据库的方法. MariaDB安装步骤 如果你是Mac上的开发者,通过本文你可以在OS X上通过Hom

MariaDB数据库主从复制、双主复制、半同步复制、基于SSL的安全复制实现及其功能特性介绍

一.复制概述 MariaDB/MySQL内建的复制功能是构建大型,高性能应用程序的基础.将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位

MySQL/MariaDB数据库主从复制

MySQL数据库复制概述 MySQL的主从复制是指从服务器向主服务器获取二进制日志文件,然后在从服务器上对这些日志重新执行,从而使从服务器和主服务器保持同步.但由于是异步的复制,从服务器在一定程度上落后于主服务器,刚写入到主服务器上的数据可能服务在从服务器上查询得到. MySQL的复制原理: (1)从服务器创建I/O线程连接主数据库,向主数据库请求二进制日志文件. (2)主库上启动Binlog Dump,将二进制日志文件发送给I/O线程,I/O线程获取数据后将数据写在从库的中继日志中(relay

MySQL/MariaDB数据库基于SSL实现主从复制

前言 备份数据库是生产环境中的首要任务,有时候不得不通过网络进行数据库的复制,由于MySQL/MariaDB的主从复制是明文传送的,如果在生产环境中跨网络传送,数据的安全性就无法完全保证,为了解决这一问题,我们需要一种安全的方式进行传送,即基于SSL加密进行数据传输. 部署配置 实验拓扑 实验环境 系统环境:CentOS6.6 数据库版本:mariadb-5.5.36 #注意:主从服务器数据库版本须一致:主从服务器时间须同步 #此实验从服务器只做一组为例 配置主从复制 安装mariadb [[e

Mysql(Mariadb)数据库主从复制

Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库

MariaDB数据库双主N从复制高可用实现-MMM架构的实现

一.MMM概述 MMM(Master-Master replication manager for Mysql)是一套灵活的脚本程序,用来监控和故障切换,管理mysql Master-Master复制的配置 (同一时间只有一个节点是可写的).附带的工具套件可以实现多个slaves的read负载均衡,因此你可以使用这个工具移除一组服务器中复制延迟较高的服务器的虚拟IP,它还可以备份数据,两节点之间再同步等等. MMM主要的功能通过下面三个脚本来实现: mmm_mond 监控进程,负责所有的监控工作

Mysql实现数据库主从复制、主主复制、半同步复制

--------------Mysql实现数据库主从复制架构---------------- 一.环境准备: centos系统服务器2台.一台用户做Mysql主服务器,一台用于做Mysql从服务器,配置好yum源.防火墙关闭.各节点时钟服务同步.各节点之间可以通过主机名互相通信 192.168.41.145   master 192.168.41.137  slave 二.准备步骤: 1.iptables -F && setenforce 清空防火墙策略,关闭selinux 2.①vim

mysql数据库主从复制部署笔记

数据库主从复制原理:数据库的主从复制就是从master数据库复制到slave数据库,在master与slave之间实现整个复制需要三个线程来完成,其中两个在slave端一个在master端.在master端必须打开binlog功能,因为从数据库需要获得主数据的完整的操作日志然后再自身上顺序的执行日志中的各种操作. 主要步骤:1.将slave的io线程连上master,请求获得指定日志文件的指定位置之后的操作日志的内容:2.master获得slave的io线程请求后,将请求中读取到的指定日志的指定

web服务文件更新自动同步、数据库主从复制、shell脚本实现网站代码备份和mysql备份

基搭建LAMP环境,并实践基于DNS做基于域名的虚拟主机中的环境,重新搭建一个同样的环境 要求: a)实现web服务文件更新的自动同步到另一台机器上 b)数据库实现主从复制 c)通过shell脚本实现网站源代码备份和mysql备份,备份策略包括全量备份.增量备份.差异备份 a,实现web服务文件更新的自动同步到另一台机器上: 1,在httpd服务器上建立基于FQDN的两个虚拟web站点,并创建相关目录. 2,修改测试windows主机的hosts文件,并编辑两个虚拟web站点对应的目录下的ind