【MySQL主从复制原理及搭建全过程】

目录

  • 准备工作
  • 主从复制原理
  • 开始搭建主从复制

本文将使用mariaDB数据库实现主从复制,其步骤与MySQL数据库无差异。

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。

开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避免这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的替代品。

Red Hat Enterprise Linux/CentOS 7.0发行版已将默认的数据从MySQL切换到MariaDB。

@

***

准备工作

yum安装mariaDB

准备两台服务器,分别安装mariaDB

.

1.配饰repo仓库文件,指定mariaDB的YUM源

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

2.开始安装mariaDB

yum -y install MariaDB-server MariaDB-client 

3.安装完毕后,启动mariaDB

systemctl start mariadb

初始化mariaDB

在确认MariaDB数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面5个步骤。

.

? 设置 root 管理员在数据库中的密码值(注意,该密码并非root管理员在系统中的密码,这里的密码值默认应该为空,可直接按回车键)。

? 设置root管理员在数据库中的专有密码。

? 随后删除匿名账户,并使用root管理员从远程登录数据库,以确保数据库上运行的业务的安全性。

? 删除默认的测试数据库,取消测试数据库的一系列访问权限。

? 刷新授权列表,让初始化的设定立即生效。

.

确保MariaDB服务正在运行,执行初始化命令:

mysql_secure_installation

初始化过程如下图:

补充知识点

在配置文件中指定中文编码

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

创建授权远程用户

# 取消全局密码复杂度策略
set global validate_password_policy=0;

# 创建远程用户
create user "用户名"@"可访问范围" identified by "密码";

# 授权用户所有权限
grant all privileges on *.* to "用户名"@"可访问范围";

# 授权tom从192.168.1.129主机复制数据(一般用于主从复制)
grant replication slave on *.* to ‘tom‘@‘192.168.1.129‘;

# 检查主库创建的复制账号
select user,host from mysql.user;

# 检查tom授权账号的权限
show grants for ‘tom‘@‘192.168.1.129‘;

# 刷新授权表,使其立即生效
flush privileges;

锁表只读,用于防止数据写入

flush table with read lock;  # 锁
unlock tables;  # 解

备份恢复数据

# 备份
[[email protected] ~]# mysqldump -uroot -p --all-databases > all_db.sql
# 恢复
[[email protected] ~]# mysql -uroot -p < all_db.sql

主从复制原理

MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件而是通过binlog日志复制到需要同步的从服务器上

MySQL数据库支持单向、双向、链式级联等不同业务场景的复制。在复制的过程中,一台服务器从当主服务器(Master),接收来自用户的内容更新,而一个或多个其它的服务器充当从服务器(Slave),接收来自Master上binlog文件的日志内容,解析出SQL,重新更新到Slave,使得主从服务器的数据达到一致。

主从复制的逻辑有以下几种

.

一主一从:单向主从同步模式,只能在Master端写入数据

一主多从:单向主从同步模式,只能在Master端写入数据

主主同步:此架构可以在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重做中继日志中的事件,将改变反映到它自己的库中。

.

步骤2中,slave服务器会开启两个线程,分别用于:读取master的二进制日志;将日志写入中继日志。

***

开始搭建主从复制

主服务器配置

开始修改配置文件

.

修改配置文件/etc/my.cnf,在[mysqld]配置下增加两项配置:server-id=1log-bin=mysql-bin

  • server-id=1: 是服务器的唯一标示(主从服务器之间必须不同)。
  • log-bin=mysql-bin: 启用二进制日志,并指定日志名称为mysql-bin。

.

如下图:

保存退出后重启服务:systemctl restart mariadb

.

开始创建授权复制用户

# 创建复制用户
MariaDB [(none)]> create user ‘tom‘@‘192.168.43.71‘ identified by ‘[email protected]‘;
Query OK, 0 rows affected (0.01 sec)

# 授权复制用户
MariaDB [(none)]> grant replication slave on *.* to ‘tom‘@‘192.168.43.71‘;
Query OK, 0 rows affected (0.00 sec)

# 刷新授权表,使其立即生效
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

.

开始备份数据

# 锁表
MariaDB [(none)]> flush table with read lock;
Query OK, 0 rows affected (0.00 sec)

# 打开新窗口,导出所有数据并传至从服务器
[[email protected] ~]# mysqldump -uroot -p --all-databases > all_db.sql
[[email protected] ~]# scp all_db.sql 192.168.43.71:/root/

# 查看二进制日志文件和当前的位置并记录
# File是二进制日志文件名,Position是日志的当前位置
# 强调:记住File与Position的值,从服务器中会用到
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      567 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

# 解锁
# 这一步骤应在主从服务器均配置完毕,可实现数据同步后,再解锁
MariaDB [(none)]> unlock tables;
Query OK, 0 rows affected (0.00 sec)

从服务器配置

开始修改配置文件

.

修改配置文件/etc/my.cnf,在[mysqld]配置下增加此配置:server-id=2

  • server-id=2: 是服务器的唯一标示(主从服务器之间必须不同)。
  • 这里与主服务器不一样,不可开启bin-log

.

如下图:

保存退出后重启服务:systemctl restart mariadb

.

导入主库传过来的备份文件

[[email protected] ~]# mysql -uroot -p < all_db.sql

.

开始配置复制参数

# 查询从库信息
MariaDB [(none)]> show variables like ‘server_id‘;
MariaDB [(none)]> show variables like ‘log_bin‘;

# 配置复制参数
MariaDB [(none)]> change master to
    -> master_host=‘192.168.43.149‘,  # 指定主库的ip
    -> master_user=‘tom‘,  # 指定主库创建远程用户名
    -> master_password=‘[email protected]‘,  # 指定主库创建远程用户密码
    -> master_log_file=‘mysql-bin.000001‘,  # 指定二进制日志文件
    -> master_log_pos=567;  # 指定二进制日志的当前位置
Query OK, 0 rows affected (0.02 sec)

# 启动从库同步
MariaDB [(none)]> start slave;

# 检查复制状态,详见下图
MariaDB [(none)]> show slave status\G;

检查主从复制是否成功的关键在于:

好了,主从同步已配置完毕了,去测试吧。

附:

此时还未配置从库的只读模式,只需在从服务器的配置文件中的[mysqld]配置下增加read-only=true,并且在从服务器上创建普通用户,使用普通用户主从同步即可达到只读的效果。

注意一个坑:如果使用root用户,则无法达到只读的效果,超级用户root不受只读限制。

原文地址:https://www.cnblogs.com/zyk01/p/10176530.html

时间: 2024-10-04 04:36:56

【MySQL主从复制原理及搭建全过程】的相关文章

MySQL 主从复制原理及搭建

一.主从复制的工作过程: 二.MySQL复制类型 基于SQL语句的复制 基于行的复制 混合复制 三.实验环境 OS:CentOS 6.5 x64 master:192.168.0.134 slave:192.168.0.135 三.配置主从复制 1.配置时间同步 master:配置为时间服务器 [[email protected] ~]# yum install ntp 编辑/etc/ntp.conf 添加如下两行: server 127.127.1.0 fudge 127.127.1.0 st

MySQL主从复制原理深入解析与练习

MySQL主从复制画图描述: MySQL主从复制原理上图详解: ① 用户做crud操作,写入数据库,更新结果记录到binlog中: ② 主从同步是主找从的,从库IO发起请求,主库的主进程看从库的master change中给的参数是否合法,如果合法主进程交给IO进程进行3操作,否则拒绝: ③ 主库根据master的位置点,从这个位置点的binlog日志一直到binlog最后,将其准备发送给从库: ④ 将找到的binlog日志发给从库,并且还会发送新的日志点: ⑤ 从库收到binlog日志,将其写

MySQL主从复制原理和实践

mysql主从复制 mysql支持单向 双向 链式级联 实时 异步复制,在复制过程中,一台服务器充当主服务器(Master),而一个或多个其他服务器充当从服务器(Slave) mysql主从复制的应用场景 1.主从服务器互为备份 2.主从服务器读写分离分担网站压力 读写分离 中大型公司:通过程序(php,java) 测试环境:代理软件(mysql-proxy,amoeba) 门户网站:分布式dbproxy(读写分离,hash负载均衡,健康检查) 主从同步实践操作(多实例环境) 1.主库上面设置s

mysql 主从复制原理

主从形式 mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的: 多主一从---5.7开始支持 联级复制 用途及条件 mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件: 主库开启binlog日志(设置log-bin参数) 主从server-id不同 从库服务器能连通主库 主从原理 mysql主从复制原理 从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库 的binlo

mysql 主从复制集群搭建

话说一个正确的文章能敌千钧万马,一句善意的点拨能敌百万雄狮,一个好友的帮助能让你拨开云雾见青天.搭建mysql主从同步,这两天看网上的博客教程很多,当然,错误的文章会误导你很多,我就被误导了.现将这两天的搭建过程详细记录: 前期准备:关闭防火墙 关闭SELINUX 关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq  #保存退出 s

Mysql主从复制原理过程

1.自个画的流程图. 2.简单描述mysql主从复制原理过程 2.1(对应上图步骤1) 在SLAVE服务器上执行start slave命令开启主从复制开关,开始进行主从复制. 2.2(对应上图步骤2) 此时,SLAVE服务器的I/O线程会通过在MASTER上已经授权的复制用户权限请求连接MASTER服务器,并请求从指定binlog日志文件的指定位置(日志文件名和位置就是在配置主从配置复制服务时执行change master命令指定的)之后开始发送binlog日志内容. 2.3(对应上图步骤3)

Mysql主从复制原理与实践

Mysql主从复制原理: 1.Mysql支持单双向.链式级联.异步复制.可以一主一从,也可以一主多从. 2.链式级联中的从是下级从的主.类似A-->B-->C-->D. 3.主从复制配好后,数据库的更新必须在主服务器上进行,以免造成主从冲突. 4.主从服务器架构可实现对用户的请求实现读写分离.从处理用户的select,主处理update,insert,delete等更新.以此保持主从实时同步. 5.可以把从服务器根据业务来拆分. 6.mysql主从复制是异步复制.master与slave

[转]MySQL主从复制原理介绍

MySQL主从复制原理介绍 一.复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新. MySQL 使用3个线程来执行复制功能,其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句.主服务器创建一个线程将二进制日志中的内容发送到从服务器.该线程

MySQL主从复制原理及实践

第1章 MySQL的主从复制介绍 MySQL的主从复制方案,和上述文件及文件系统级别同步是类似的,都是数据的传输.只不过MySQL无需借助第三方工具,而是其自带的同步复制功能.另外一点,MySQL的主从复制并不是磁盘上文件直接同步,而是逻辑的binlog日志同步到本地再应用执行的过程. 复制可以单向:M=>S,也可以是双向M<==>M,也可以是多M换装同步等.如果设置了链式级联复制,那么,从(slave)服务器本身除了充当从服务器外,也会同时充当其下面从服务器的主服务器.链式级联复制类似