在学习之前,我们首先要学会在Linux系统安装MySQL,还没安装成功的同学可以点连接进去学习,纯干货哦!——>Linux安装MySQL5.7——避开所有坑!
一、简介
( 注意:一个主库可以有多个从库)
二、了解Mysql主从复制的三个关键步骤
1、master将改变 记录到二进制日志(binary log)
2、slave 将 master 的 binary log 拷贝到它的中继日志(relay log)
3、slave重做中继日志中的事件,将改变应用到自己的数据库中
三、实现MySql主从复制
提前准备好两台服务器,分别安装MySql并启动成功
- 主库Master
- 从库Slave
1、进入其中一台服务器中的MySQL,将此库作为Master主库来配置,修改MySQL的配置问文件
增加两行设置,开启MySQL的二进制日志功能,设置服务器的唯一标识(前面也提到过,一个主库可能对应多个从库,为了区分开来,把每个从库的id设置唯一)。保存并退出。
2、重启数据库
3、先刷新一下权限表。把在所有数据库的所有表的所有权限赋值给位于所有IP地址的root用户。
mysql> flush privileges;
4、登录你的作为主库使用的Linux中的MySQL后:输入下面命令:
MySQL8之前的数据库版本使用这个命令
mysql> grant replication slave on*.*to'user1'@'%'identified by 'user1@123456';
MySQL8及之后的数据库版本使用这两个命令
mysql> create user user1 identified with 'mysql_native_password' by 'user1@123456';
mysql> grant replication slave on*.*to user1;
(上面的SQL用于创建一个用户user1,密码为user1@123456,并给user1用户授予replication slave权限。常用于建立复制时所需要用到的用户权限,也就是slave必须被master授权,具有该权限的用户才能通过该用户复制。说白了user1就是个工具人,用来提供建立主从复制的权限)
5、执行下面SQL,记录下结果中的File和Position的值
//查看主库的状态
show master status
注:上面的操作执行完毕后就不在主库中执行其他操作了,因为我们执行其他操作的时候,结果中的File和Position的值会变化,现在从库的这个文件名和position在从库中会使用到。
至此,主库Master已经设置好了,下面我们来设置从库Slave
---------------------------------------------------------------------------------------------------------------------------------
6、配置作为从库的服务器中的 my.cnf文件,加入服务器唯一ID
server-id=101 #服务器唯一id
7、重启MySQL服务器,让配置文件生效
service mysql restart
8、登录MySQL数据库,执行下面的SQL
mysql> change master to master_host='192.168.80.100',master_user='user1',master_password='user1@123456',master_log_file='mysql-bin.000010',master_log_pos=154;
#启动slave线程(底层就是一个IO_THREAD)
mysql> start slave
简单说一下这句SQL:
(这一步报错的同学可以先尝试stop slave 这个命令,关闭此线程再执行)
9、执行完之后,所有配置均已完成,但是为了保险起见,我们在从库上面执行一下这句SQL
mysql> show slave status\G;
重点看一下圈出来的三条,若跟上图一样的话,说明你已成功开启两库的主从复制!
(若你的结果是下面的,不要灰心,说明你的3306端口处于关闭状态,往下看步骤,打开就ok了)
打开3306端口的步骤:
主库也要去开启一下3306端口,步骤同上,第六步输入的SQL为:
show master status;
最后再从步骤8往下进行就可以了,注意主库执行完上面的SQL之后,返回的结果要在步骤8中用到哦!
最终我们完成主从库配置之后就可以在Navicat上面连接到两个主从库,在主库中发生任意增删改,从库中也会做相应的变化,此时我们就真正完成了数据库的主从复制!
呕心沥血干了两天,踩过N多个坑最终完成了这篇文章和一些踩坑的文章,您要觉得这篇文章写的还不错的话,点个赞呗!