主从复制的概念
主数据库的DDL和DML操作通过二进制日志传到从数据库上,然后再从数据库上对这些日志进行重新执行,从而使得从数据库和主数据库的数据保持一致。
实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。
MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。MYSQL-A变化,MYSQL-B也会变化。即MYSQL复制。
一、前提条件
一主一从(主机本地,从机虚拟机)
新建了一台虚拟机,从机
配置jdk环境变量:
https://blog.csdn.net/xsh096011/article/details/105677524
linux安装配置MySQL:(建议安装旧版本MySQL,新版本有其他问题)
https://blog.csdn.net/xsh096011/article/details/105677698
二、前期准备
主机ping从机;从机ping主机(保证主从机在同一网络下)
主机、从机关闭防火墙
linux下关闭防火墙:systemctl stop firewalld;
开启防火墙:systemctl start firewalld;
开机禁用:systemctl disable firewalld;
三、主从配置
添加server_id =1(主服务器id)
开启二进制日志功能:在my.ini中添加如下语句:log-bin=“mysql安装路径\log\binlog.log”;
主机主要配置这两项,其他配置可选;
从机配置
注意:(basedir、datadir为linux下安装mysql路径,每个人路径不同)
每个参数含义如下:
四、windows主机上建立账户并授权slave
主机登录mysql
mysql新版本需要按照如下命令建立账户授权slave:
创建账户:create user ‘用户名’@’访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@’访问主机’ ;(修改权限时在后面加with grant option,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人)
输入FLUSH PRIVLIEGES;刷新
查询master状态:show master status;
记录下File和Position值;
五、Linux从机上配置需要复制的主机
(注意:MASTER_HOST的值,我的就是因为MASTER_HOST原来查错了导致主从配置失败)
从机Linux登录:
Linux从机配置需要复制的主机
在从服务器上登录主服务器slave账号测试:
mysql -u用户名 -p密码 -h主机IP;
(Slave_IO_Running=Connecting可通过如上命令测试下)
六、主从测试
主机创建mydb59;建表dog,插入一条记录;
从服务器查询到一条记录;
MySQL主从复制配置测试成功!
踩到的坑:
注意,修改my.ini文件要写的格式和原配置文件格式同,否则识别不出来;
ERROR 1410 (42000): You are not allowed to create a user with GRANT
解决:
使用mysql:use mysql;
修改host:update user set host=’%’ where user=‘root’;
执行:Grant all privileges on test.* to ‘root’@’%’;
ERROR 1396 (HY000): Operation CREATE USER failed for ‘xxxx’@'IP '问题
使用mysql的drop指令可解决此问题,,输入以下指令:
use mysql;
drop user ‘xssScaner_user’@‘localhost’;
flush privileges;
然后再执行创建用户的指令:
原因:
新版mysql版本已经将创建账户和赋予权限的方式分开
解决办法:
创建账户:create user ‘用户名’@’访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@’访问主机’ ;(修改权限时在后面加with grant option)
Slave_IO_Running和Slave_SQL_Running必须同时为Yes,否则主从配置失败
Mysql主从同步时Slave_IO_Running:Connecting ; Slave_SQL_Running:Yes的情况故障排除:
我的是因为MASTER_HOST值输错导致;