读写分离——Mysql主从复制

发布时间 2023-04-08 17:10:00作者: 佛系粥米

问题说明:读和写所有压力都由一台数据库承担,压力大,数据库服务器磁盘损坏则数据丢失,单点故障

写操作——insert、update、delete——》Master主库——数据同步——》Slave从库《——读操作——

                          Mysql主从复制    

 

 

Mysql主从复制

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

Mysql主从复制过程分为三步:

* master将改变记录到二进制日志(binary log)

* slave将master的binary log拷贝到它的中继日志(relay log)

* slave重做中继日志中的事件,将改变应用到自己的数据库中

 

两个虚拟机各自安装mysql,其中一台用作主库(Master),一台用作从库(Slave);

配置-主库Master:

第一步:修改Mysql数据库的配置文件/etc/my.cnf

[mysqld]

log-bin=mysql-bin      #[必须]启用二进制文件

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

第二步:重启Mysql服务

systemctl restart mysqld

第三步:登录Mysql数据库,执行下面SQL

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

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

第四步:登录Mysql数据库,执行下面的SQL,记录下结果中File和Position的值

show master status;   查看Master的状态,执行完此SQL后不要再执行任何操作

配置-从库Slave

第一步:修改Mysql数据库的配置文件/etc/my.cnf

[mysqld]

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

第二步:重启mysql服务

systemctl restart mysqld

第三步:登录Mysql数据库,执行下面SQL

change master to

master_host  = '主库ip', master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000001',master_log_pos=439;

start slave;

 [master_log_file和master_log_pos为主库执行show master status查询的结果]

show slave status\G    查看数据库状态。

 

测试主从复制能否实现:

主库任意创建一个数据库和表。从库刷新后也会出现相同的数据库和表。