MYSQL主从复制读写分离(多台数据库部署)手把手教学

MYSQL主从复制

    • 1.介绍(快速理解)
    • 2.在Linux下安装MYSQL
    • 3.配置主从数据库
      • 1.1 配置固定IP
      • 1.2 配置主数据库
      • 1.3 赋予从库权限
      • 1.4 配置从数据库
      • 1.5 匹配主库
      • 1.6 克隆虚拟机问题补充
    • 4.测试主从效果

1.介绍(快速理解)

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。

MySQL复制过程分成三步:

  • master将改变记录到二进制日志(binary log)
  • slave将master的binary log拷贝到它的中继日志(relay log)
  • slave重做中继日志中的事件,将改变应用到自己的数据库中

MYSQL主从复制读写分离(多台数据库部署)手把手教学_第1张图片

简单点来说,就是,所有的增删改查都请求一个数据库,负荷压力太大,为了解决这个问题,我们可以设置多个从数据库从数据库复制主数据库的内容,从数据库做操作量最多的查询请求主数据库增删改,主数据库进行操作后会产生日志,从数据库会根据日志解析,然后再在从数据库做相同的操作,来达到数据库数据相同。

2.在Linux下安装MYSQL

这个我之前的博客中写过了,可以参考:https://blog.csdn.net/m0_63684495/article/details/128748229

注意:这里需要两个虚拟机,分别安装MYSQL,其中一个充当主数据库,另一个充当从数据库

3.配置主从数据库

安装完成MYSQL后记得启动服务。

systemctl start mysqld

1.1 配置固定IP

同样的之前写过,不再赘述,请参考:https://blog.csdn.net/m0_63684495/article/details/128713019

1.2 配置主数据库

先拿出一个需要做主数据库的虚拟机,修改mysql配置

vim /etc/my.cnf

在配置文件中[mysqld]下插入(记得用ROOT权限):
服务器唯一ID,ID编号可以自行更改,我是根据我的ip来设置的

log-bin=mysql-bin   #[必须]启用二进制日志
server-id=123      #[必须]服务器唯一ID

如图:
MYSQL主从复制读写分离(多台数据库部署)手把手教学_第2张图片
重启mysql服务:

systemctl restart mysqld

1.3 赋予从库权限

登录数据库,执行下面命令:

GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';

注:上面SQL的作用是创建一个用户xiaoming密码为Root@123456,并且给xiaoming用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权具有该权限的用户,才能通过该用户复制。

查看主库的状态:

show master status;

结果如图:
MYSQL主从复制读写分离(多台数据库部署)手把手教学_第3张图片

记录下结果中FilePosition的值,后面要用。

1.4 配置从数据库

从数据库,修改配置文件:

vim /etc/my.cnf

在配置文件中[mysqld]下插入(记得用ROOT权限):

server-id=124      #[必须]服务器唯一ID

如图:
MYSQL主从复制读写分离(多台数据库部署)手把手教学_第4张图片

重启mysql服务:

systemctl restart mysqld

1.5 匹配主库

change master to master_host='主库ip',master_user='xiaoming',master_password='Root@123456',master_log_file='主库的File',master_log_pos=主库的Position;

注意:替换主库ip,主库的File,主库的Position 的时候要清除空格,不然会错误

start slave;

如图:
在这里插入图片描述
查看从库状态:

show slave status \G;

MYSQL主从复制读写分离(多台数据库部署)手把手教学_第5张图片
看到这里两个Yes就是成功了

1.6 克隆虚拟机问题补充

如果你的两个虚拟机是克隆来的,那就是Slave_IO_Running: NO,因为你复制过来后,另外一个MySQL在运行,会导致占用。
如果你的不是克隆来的,可以直接下一步了。

解决方案:
分别查看两台的UUID:

select uuid();

如果一样,选择从库的虚拟机,进行操作。
查找auto.cnf

find / -iname "auto.cnf"

在这里插入图片描述
找到之后直接给他删除就行了(这里按照你的文件路径)。

rm /var/lib/mysql/auto.cnf

删除后登录数据库

mysql -uroot -p

停止slave链路

start slave;

开启slave链路

start slave;

查看状态

show slave status \G;

4.测试主从效果

我先用Navicat for MySQL连接上这两个数据库。
MYSQL主从复制读写分离(多台数据库部署)手把手教学_第6张图片
目前是最初始的状态,我现在先在主库创建一个数据库。

MYSQL主从复制读写分离(多台数据库部署)手把手教学_第7张图片

MYSQL主从复制读写分离(多台数据库部署)手把手教学_第8张图片

我现在刷新一下从库,看看效果。
MYSQL主从复制读写分离(多台数据库部署)手把手教学_第9张图片
这样就完成了,数据库的主从分离。
当然你的从数据库,可以不止一台,你可以多台,配置步骤大致相同,但是你的id要唯一。

你可能感兴趣的:(数据库,数据库,mysql,服务器)