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

文章目录

    • 1.主从复制概念
    • 2.主从复制原理
    • 3.主从复制结构的搭建
      • 3.1 主库配置
      • 3.2 从库配置
    • 4.测试主从复制是否搭建成功
    • 5.主从复制的小结

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操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL主从复制——概念、原理、搭建过程_第1张图片

2.主从复制原理

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

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

3.主从复制结构的搭建

MySQL主从复制——概念、原理、搭建过程_第3张图片

#关闭防火强
systemctl stop firewalld
#关闭防火墙的开机自启
systemctl disable firewalld

MySQL主从复制——概念、原理、搭建过程_第4张图片

#查看服务器mysql的状态
systemctl stop firewalld

MySQL主从复制——概念、原理、搭建过程_第5张图片

3.1 主库配置

MySQL主从复制——概念、原理、搭建过程_第6张图片

vim /etc/my.cnf

MySQL主从复制——概念、原理、搭建过程_第7张图片
配置完主库后重启主库

systemctl restart mysqld

MySQL主从复制——概念、原理、搭建过程_第8张图片

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

登陆mysql指令:

mysql -uroot -p

@%表示创建的这个用户可以在任意主机上访问当前服务器
创建远程连接账户: @%表示创建的这个用户可以在任何服务器上

CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';

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

GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

MySQL主从复制——概念、原理、搭建过程_第9张图片
通过以下指令查看二进制日志的坐标:

show master status;

MySQL主从复制——概念、原理、搭建过程_第10张图片

3.2 从库配置

对于从库来说我们只需要从从库里面进行查询即可,不需要从从库里面进行写入操作,所以将read-only设置为1,这是设置的只读仅仅代表的是对普通用户是只读的,如果这个用户具有超级管理员权限,它也是可以进行读写的,如果想要将超级管理员的读写功能也变成只读的,也可以再设置一个参数,这个参数叫super-read-only=1
MySQL主从复制——概念、原理、搭建过程_第11张图片

修改从库mysql配置文件:

vim /etc/my.cnf

添加两条配置:
MySQL主从复制——概念、原理、搭建过程_第12张图片
重启从库mysql:

systemctl restart mysqld

接着配置主库与从库使其相互关联:
设置主库配置(从库中执行下面的语句
8.0.23之后的版本设置如下:

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之前的版本设置如下:

CHANGE MASTER TO MASTER_HOST SOURCE='xxx.xxx.xxx.xxx’,MASTER_USER='xxx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='xxx',MASTER_LOG_POS=xxx;

MySQL主从复制——概念、原理、搭建过程_第13张图片
MySQL主从复制——概念、原理、搭建过程_第14张图片
MySQL主从复制——概念、原理、搭建过程_第15张图片

start replica;

MySQL主从复制——概念、原理、搭建过程_第16张图片
执行完上面的命令,主从复制就已经启动了。
\G 的作用是显示日志的时候每一列数据转换为每一行,查看起来比较方便

show replica status\G;

MySQL主从复制——概念、原理、搭建过程_第17张图片
MySQL主从复制——概念、原理、搭建过程_第18张图片
IO_runing表示IO那组线程运行是否正常,表示读取二进制日志并写入从库中继日志的线程
SQL——running表示那一组sql线程运行是否正常。表示从库读取中继日志,并写入从库反映自身变化的。

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

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

MySQL主从复制——概念、原理、搭建过程_第19张图片

主库中创建一个数据库db01并插入数据
MySQL主从复制——概念、原理、搭建过程_第20张图片
查看从库中是否同步?
MySQL主从复制——概念、原理、搭建过程_第21张图片
MySQL主从复制——概念、原理、搭建过程_第22张图片
刚才演示的主库和从库复制,它是从二进制日志的当前位置往后进行同步的,如果之前的数据也需要同步到从库中,这时就需要将主库的数据导入到一个sql文件中,然后在从库中执行此sql脚本,来保证主库和从库的初始数据是一致的。然后再从当前位置往后进行主从复制的同步。

5.主从复制的小结

MySQL主从复制——概念、原理、搭建过程_第23张图片

你可能感兴趣的:(MySQL知识,mysql,oracle,数据库)