MySQL主从复制——概念、原理、搭建过程

文章目录

DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。

DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

1.主从复制概念

主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。

2.主从复制原理

主库中的数据是怎么同步到从库中的呢?

主库一旦发生增删改等操作以及执行DDL语句的时候,主库会将所有的数据变更写入到一份binlog二进制日志当中。在这份二进制日志当中就记录着主库所有的数据变更。

从库涉及两个线程,一个线程叫 IOthread,它会发起一个请求来连接master数据库,并读取master数据库中的binlog日志。当binlog日志读取并且返回之后 IOthread会写入到slave自身的一份日志当中,这份日志叫中继日志Relay log。另外slave中还有另外一个叫SQLthread的线程,这个SQLthread主要负责读取中继日志中的数据,然后把中继日志中所记录的数据变化,再反映到自身数据库的数据变化,从而保证主从数据库是一致的。

3.主从复制结构的搭建

bash 复制代码
#关闭防火强
systemctl stop firewalld
#关闭防火墙的开机自启
systemctl disable firewalld
bash 复制代码
#查看服务器mysql的状态
systemctl stop firewalld

3.1 主库配置

bash 复制代码
vim /etc/my.cnf

配置完主库后重启主库

bash 复制代码
systemctl restart mysqld

下一步需要登陆主库,并在主库上创建一个远程连接账号,并赋予主从复制权限。

登陆mysql指令:

bash 复制代码
mysql -uroot -p

@%表示创建的这个用户可以在任意主机上访问当前服务器

创建远程连接账户: @%表示创建的这个用户可以在任何服务器上

bash 复制代码
CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

给itcast用户分配主从复制的权限:

bash 复制代码
GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

通过以下指令查看二进制日志的坐标:

bash 复制代码
show master status;

3.2 从库配置

对于从库来说我们只需要从从库里面进行查询即可,不需要从从库里面进行写入操作,所以将read-only设置为1,这是设置的只读仅仅代表的是对普通用户是只读的,如果这个用户具有超级管理员权限,它也是可以进行读写的,如果想要将超级管理员的读写功能也变成只读的,也可以再设置一个参数,这个参数叫super-read-only=1

修改从库mysql配置文件:

bash 复制代码
vim /etc/my.cnf

添加两条配置:

重启从库mysql:

bash 复制代码
systemctl restart mysqld

接着配置主库与从库使其相互关联:

设置主库配置(从库中执行下面的语句

8.0.23之后的版本设置如下:

bash 复制代码
CHANGE REPLICATION SOURCE TO SOURCE_HOST='xxx.xxx',SOURCE_USER='xxx',SOURCE_PASSWORD='xxx',SOURCE_LOG_FILE='xxx',SOURCE_LOG_POS=xxx;

8.0.23之前的版本设置如下:

bash 复制代码
CHANGE MASTER TO MASTER_HOST SOURCE='xxx.xxx.xxx.xxx',MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx;



bash 复制代码
start replica;

执行完上面的命令,主从复制就已经启动了。

\G 的作用是显示日志的时候每一列数据转换为每一行,查看起来比较方便

bash 复制代码
show replica status\G;


IO_runing表示IO那组线程运行是否正常,表示读取二进制日志并写入从库中继日志的线程

SQL------running表示那一组sql线程运行是否正常。表示从库读取中继日志,并写入从库反映自身变化的。

4.测试主从复制是否搭建成功

首先查看主库中的数据和从库中的数据,并在主库当中执行增删改的操作。

主库中创建一个数据库db01并插入数据

查看从库中是否同步?

刚才演示的主库和从库复制,它是从二进制日志的当前位置往后进行同步的,如果之前的数据也需要同步到从库中,这时就需要将主库的数据导入到一个sql文件中,然后在从库中执行此sql脚本,来保证主库和从库的初始数据是一致的。然后再从当前位置往后进行主从复制的同步。

5.主从复制的小结

相关推荐
m0_748248023 分钟前
Redis 简介与安装指南
数据库·redis·缓存
Elastic 中国社区官方博客5 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪7 小时前
两次连接池泄露的BUG
java·数据库
南宫乘风8 小时前
基于 Flask + APScheduler + MySQL 的自动报表系统设计
python·mysql·flask
TDengine (老段)8 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349848 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE9 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102169 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎9 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP10 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql