介绍
MysSQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台AysQL数据库(slave,即从库)从另一台MysQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MysQL数据库自带功能,无需借助第三方工具。
MysQL复制过程分成三步:
- master将改变记录到二进制日志( binary log)
- slave将master的binary log拷贝到它的中继日志(relay log)
- slave重做中继日志中的事件,将改变应用到自己的数据库中
配置-前置条件
提前准备好两台服务器,分别安装Mysql并启动服务成功
如果配置的mysql中没有my.ini文件
下方链接可以配置
(简单成功版本)Mysql配置my.ini文件__揽的博客-CSDN博客
(简单成功版本)Mysql配置my.ini文件__揽的博客-CSDN博客
大坑:如果两份mysql文件都是复制的一份,那么就修改其中一份的uuid,要不后续配置不成功
主从两台数据库的UUID相同了,即data目录下的 auto.cnf 中的 server-uuid值相同了找个字母随便改一下就行 比如把 9改成8 ,重启数据库
uuid在这个文件夹里面
注意:克隆的需要修改数据库的uuid
配置-主库Master
1.修改Mysql数据库的配置文件my.ini
在my.ini文件下面的[mysqld]的下面配置如下
[mysqld] log-bin=mysql-bin #[必须]启用二进制日志 server-id=100 #[必须]服务器唯一ID
2.重启mysql,并登陆mysql
net stop mysql//关闭mysql net start mysql//打开mysql mysql -u root -p//登陆mysql
3.创建可以主从中复制的权限账号
CREATE USER '用户名' IDENTIFIED WITH 'mysql_native_password' BY '密码';//第一步 GRANT REPLICATION SLAVE ON *.* TO '用户名';//第二步 flush privileges;//第三步刷新立刻生效
4.执行下面SQL,记录下结果中File和Position的值
show master status;
File和Position后续副数据库连接的时候用到
OK,到这里主数据库就别动了,因为操作可能会影响上图中的Position的值
配置-从库Slave
1.修改Mysql数据库的配置文件my.ini
在my.ini文件下面的[mysqld]的下面配置如下
注意:这里的server-id不能与主数据的id相等
[mysqld] server-id=101 #[必须]服务器唯一ID
2.重启mysql,并登陆mysql
net stop mysql//关闭mysql net start mysql//打开mysql mysql -u root -p//登陆mysql
3.配置连接主数据库
执行下面命令
change master to master_host='主数据库地址',master_user='主数据创建的权限账号',master_password='密码',master_log_file='主数据里面的File',master_log_pos=主数据库里面的Position;
例子
change master to master_host='101.201.110.183',master_user='wang1',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=441;
红字都是主数据执行完最后一步显示的东西
4.启动连接
start slave;
5.查看连接
show slave status\G;
这两个都是YES就是配置成功了,可以试着操作主数据库,然后刷新副数据库测试效果
6.Slave_IO_Running: No 解决方法
你看看这里
大坑:如果两份mysql文件都是复制的一份,那么就修改其中一份的uuid,要不后续配置不成功
主从两台数据库的UUID相同了,即data目录下的 auto.cnf 中的 server-uuid值相同了找个字母随便改一下就行 比如把 9改成8 ,重启数据库
uuid在这个文件夹里面