主从复制 master_slave

读和写所有压力都由一台数据库承担,压力大。数据库服务器磁盘损坏则数据丢失,单点故障。读写分离要以主从复制为基础。

主从复制 master_slave_第1张图片

MySQL主从复制:

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

mysql复制过程分为三步:

主从复制 master_slave_第2张图片

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

配置主从数据库:

准备工作:

两台服务器,分别安装mysql并启动服务成功:

主库:192.168.153.131

从库:192.168.153.129

在本地SQLyog连接两个数据库,如果连接不成功,在虚拟机中将主从数据库所在的虚拟机关闭防火墙

systemctl stop firewalld

主从复制 master_slave_第3张图片

配置-主库master:

step1:修改MySQL数据库主库的配置文件

vim /etc/my.cnf

主从复制 master_slave_第4张图片

log-bin=mysql-bin #[必须]启用二进制日志

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

step2:重启MySQL服务

systemctl restart mysqld

step3:登陆MySQL数据库(mysql -uroot -proot),执行下面SQL

grant replication slave on *.* to 'pin'@'%' identified by 'pin99';

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

step4:登陆MySQL数据库,执行下面SQL,记录下结果中的file和position的值,就不要再在主库进行任何操作,否则这两个值会变化。

show master status;

主从复制 master_slave_第5张图片

配置-从库slave:

step1:修改MySQL数据库的配置文件

vim /etc/my.cnf

主从复制 master_slave_第6张图片

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

step2:重启MySQL服务

systemctl restart mysqld

step3:登陆MySQL数据库(mysql -uroot -proot),执行下面SQL

change master to master_host='192.168.153.131' , master_user='pin', master_password='pin99', master_log_file='mysql-bin.000004', master_log_pos=154;

如果报错已有一个slave线程正在运行,则先停掉slave:

stop slave;
start slave;

step4:登陆MySQL数据库,执行下面SQL,查看从数据库的状态

show slave status\G

当显示如下信息,则主从表创建成功,如果Slave_IO_Running显示的是Connecting而非yes,是因为防火墙没关闭,执行"systemctl stop firewalld"关闭防火墙即可。

主从复制 master_slave_第7张图片

测试:

在主库131创建新的数据表master_test,在表中写入数据,刷新从库129,可以查询到主库创建的表master_test和向表中插入的数据.

你可能感兴趣的:(数据库,mysql,linux)