一.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

[root@localhost 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 apollo@'%';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for apollo@% |
+-----------------------------------------------------------------------------------------------------------------+
| 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窗口,导出数据库的所有数据.

[root@localhost ~]# 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数据库

[root@localhost ~]# scp /opt/zdk.sql root@192.168.13.183:/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.
# 输入数据库密码
root@192.168.13.183'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)

五.总结

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

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

  1. MariaDB数据库---主从复制,galera架构

    主从复制 补充一点:⑤slave端的IO thread 将从master端请求来的二进制日志文件中的内容存储到relay_log(中继日志)中 图片来源:https://www.cnblogs.com ...

  2. Mysql(Mariadb)数据库主从复制

    Mysql主从复制的实现原理图大致如下: MySQL之间数据复制的基础是以二进制日志文件(binary log file)来实现的,一台MySQL数据库一旦启用二进制日志后,其作为master,它数据 ...

  3. MySQL/MariaDB数据库的主从复制

     MySQL/MariaDB数据库的主从复制  作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL复制概述 1>.传统扩展方式 垂直扩展(也叫向上扩展,Sacle ...

  4. MariaDB设置主从复制[转载]

     3. MariaDB设置主从复制 标签: mariadbMySQL主从复制 翻译人员: 铁锚 翻译日期: 2013年12月25日 原文链接:  Setting Up Replication 主从复制 ...

  5. Mysql实现企业级数据库主从复制架构实战

    场景 公司规模已经形成,用户数据已成为公司的核心命脉,一次老王一不小心把数据库文件删除,通过mysqldump备份策略恢复用了两个小时,在这两小时中,公司业务中断,损失100万,老王做出深刻反省,公司 ...

  6. mariadb+centos7+主从复制

    MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的 ...

  7. MySQL/MariaDB数据库的MHA实现高可用实战

      MySQL/MariaDB数据库的MHA实现高可用实战 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL高可用常见的解决方案 1>.Multi-Master ...

  8. MySQL/MariaDB数据库的复制加密

      MySQL/MariaDB数据库的复制加密 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的安全问题 1>.基于SSL复制 在默认的主从复制过程或远程连接 ...

  9. MySQL/MariaDB数据库的主从级联复制

      MySQL/MariaDB数据库的主从级联复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.主从复制类型概述 1>.主从复制 博主推荐阅读: https://ww ...

随机推荐

  1. android中点击事件的4种写法

    android中获取到一些控件(比如说按钮)时,一般会为其添加点击事件,android中的点击事件一共有4中写法. 假设在布局文件中声明如下 ....... <Button android:la ...

  2. Sonatype Nexus

    Maven 常用的仓库管理http://zh.wikipedia.org/wiki/Apache_Maven

  3. AMD 3600+ X2 CPU配合昂达A69T主板超频教程

    本次超频使用电脑硬件配置如下: AMD 3600+ X2 90nm 昂达 A69T HDMI 宇瞻 DDR II 1G 667普条 西数 WD2500KS SATAII  250G 16M 戴尔 普通 ...

  4. HIVE中join、semi join、outer join

    补充说明 left outer join where is not null与left semi join的联系与区别:两者均可实现exists in操作,不同的是,前者允许右表的字段在select或 ...

  5. URAL 1750 Pakhom and the Gully 计算几何+floyd

    题目链接:点击打开链接 gg.. . #pragma comment(linker, "/STACK:1024000000,1024000000") #include <cs ...

  6. Pycharm快捷键小结

    1.编辑(Editing) Ctrl + Space 基本的代码完成(类.方法.属性)Ctrl + Alt + Space 快速导入任意类Ctrl + Shift + Enter 语句完成Ctrl + ...

  7. nginx源码学习_数据结构(ngx_pool_t)

    nginx中关于ngx_pool_t的数据结构位于src/core/ngx_palloc.c和src/core/ngx_palloc.h中,该数据结构主要是和内存池相关的,写下这篇博客前参考了网上很多 ...

  8. nginx源码学习_数据结构(ngx_str_t)

    nginx中关于字符串的数据结构位于src/core/ngx_string.c和src/core/ngx_string.h中 先来看一下数据结构: typedef struct { size_t le ...

  9. 李洪强漫谈iOS开发[C语言-002]-开发概述程序的本质与简单执行过程

    李洪强iOS开发之应用程序的本质与简单执行过程 什么叫程序? 就是一段执行指令 程序的两个状态: 保存状态(保存到硬盘上)   运行状态(由CPU执行) 代码可以执行吗? CPU(中央处理器-> ...

  10. 【实用】如何在windows下快速截图?

    如何在windows下快速截图? 快速截图是很多人的需求.截图的工具和方案也很多,但是,这里给出一个通用的,被大众认为最高效的一个解决方案. 我们都知道键盘上有一个"prt sc" ...