MySql的主从关系的理解与配置

问题:为什么要搭建这个主从关系?

个人理解:

  1. 为了读写分离,这样可以提高用户的体验,更是提高数据库的访问效率,主从搭建是2台以上的服务器进行的,1个主服务器用来写,剩下的从服务器用来读操作,写的只管写,读的只管读,各干各的,这不就是分离开来了么,服务器从干两件事减压成干一件事,那可不得轻松喽。
  2. 在搭建主从关系的时候,还实现同步操作,在主服务器上写的内容会同步在从服务器上边,达到了备份的效果,能够防止数据的丢失吧。

主从关系:

在这里插入图片描述

主从原理:

在这里插入图片描述
原理我还是大土话:就是将Master主服务器中的数据Binarylog文件(二进制文件)保存下来,之后由Slave的thread 的I/O 从服务器中的Binarylog文件去读回来,读会来再写入到自己的二进制文件下进行保存,最后在由thread的SQL读出来。

实现步骤:

1、先准备两台服务器
Mysql主服务器:

版本:mysql Ver 14.14 Distrib 5.7.20
IP:192.168.168.226
PORT:3306

Mysql从服务器

版本:mysql Ver 14.14 Distrib 5.7.20
IP:192.168.168.227
PORT:3306

2、登录主服务器,执行如下命令:

mysql -u root -p

提示密码安全策略问题。
执行如下命令:

命令1:set global validate_password_policy=0;
命令2:grant replication slave on . TO ‘backup’@‘从服务器IP地址’ identified by ‘密码’;
命令3:flush privileges

3、编辑主服务器的数据库配置文件信息my.cnf

vi /etc/my.cnf

添加如下信息:

server-id=226
log_bin=/var/log/mysql/mysql-bin.log
read-only=0
binlog-do-db=test
binlog-ignore-db=mysql
编辑完:按ESC 输入 :wq! 进行保存(有感叹号!!!)
<这里的lower_case_table_names=1>这是为了将输入的表名都改为小写
在这里插入图片描述

4、登录从服务器,执行如下命令:

编辑从服务器的数据库配置文件信息:my.cnf

vi /etc/my.cnf

添加如下信息

server-id=227
log_bin=/var/log/mysql/mysql-bin.log
在这里插入图片描述

5、重启主服务器

命令:service mysqld restart

提示如下信息:
在这里插入图片描述

6、修改:
进入/var/log/文件夹下,新建文件mysql,进入mysql目录,新建文件mysql-bin.log文件,并赋予读写权限(mysql和mysql-bin.log)

进入/var/log/文件夹下,新建文件mysql,进入mysql目录,新建文件mysql-bin.log文件,并赋予读写权限(mysql和mysql-bin.log)
在这里插入图片描述

7、登录主服务器进入mysql,查看master状态

mysql>show master status\G;

8、登录从服务器,设置主从关系
登录mysql后执行的语句:

mysql>change master to  master_host='主库的IP',master_user='backup',master_password='主库的库密码',master_log_file='mysql-bin.000001',master_log_pos=154;

9、查看从服务器的主从关系状态

mysql>show slave status\G;

10、主服务器下执行

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

11、从服务器下执行

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

(如果主从库中不存在test库,则需要重新建库,然后重启,重新构建主从关系)

12、查看从服务器的主从关系状态

mysql>show slave status\G;

当从服务器显示状态为就OK了:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在这里插入图片描述

遇到的问题:(MySQL同步故障:" Slave_SQL_Running:No" 解决办法)
一般是事务回滚造成的:
解决办法:

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;

使用示例:(就这种效果,在Linux01下test库中的student表添加数据自动在Linux02下创建)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_37384795/article/details/84954963
今日推荐