一、前言
最近公司在做一款国外的项目,没有网络,只能在本地运行,怕数据不见了,或者硬盘被偷了。
就想到了MySQL的主从复制这个功能,下面给大家演示一下如何操作。
二、环境
主库:
mysql版本:5.7
Ubuntu版本:20.4
ip: 192.168.153.128
副库:
window10
mysql版本:5.7
ip: 192.168.8.90
三、主库环境配置
1、 修改主库配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
然后保存就可以了
2、重启mysql
sudo systemctl restart mysql
3、MySQL配置
1、登录mysql
mysql -uroot -p
2、创建用户
CREATE USER 'shen'@'%' IDENTIFIED BY '123456';
2.1如果出现了密码太简单不给设置就输入下面俩个指令
set global validate_password.policy=0;
set global validate_password.length=1;
注意:这时有可能又会报“Unknown system variable ‘validate.password.policy’ ”
这是因为不同版本的mysql的关键字会有所不同,所以只要查看当前版本的关键字替换就行。
mysql> SHOW VARIABLES LIKE 'validate_password%';
然后再根据自己的关键字进行修改 就可以了
3、授予权限
GRANT REPLICATION SLAVE ON *.* TO 'shen'@'%';
4、记录数值
mysql> show master status;
四、副库环境配置
1、修改配置文件
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
加入这个数值
2、重启MySQL
window+R 输入 services.msc 打开服务 并找到MySql服务进行重启
3、进入Navicat
连接我们的mysql,打开查询页面
4、将从服务器连接到主服务器
change master to master_host='192.168.153.128',
master_user='shen',
master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=696403;
5、启动进程
start slave;
6.查看从库状态
//win使用这个
show slave status;
//如果是Ubuntu的就用下面一行
show slave status\G
正确输出
这样就可以了!!!
五、测试
主库添加测试
CREATE DATABASE `dada` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'
-> ;
Query OK, 1 row affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| dada |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> use dada;
Database changed
mysql> show tables;
Empty set (0.00 sec)
mysql> create table test(
-> id int(11),
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.03 sec)
mysql> insert into test values(1,zhangsan),
-> (2,'lisi'),
-> (3,'wagnwu');
ERROR 1054 (42S22): Unknown column 'zhangsan' in 'field list'
mysql> insert into test values(1,'zhangsan'),
-> (2,'lisi'),
-> (3,'wagnwu');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> quit
从库查看
这已经添加成功了!!
遇到的问题
遇到了好多问题跟大家分享一下。
一、Slave_IO_Running = connecting
1.问题原因:
(1)网络不通
(2)防火墙端口未开放
(3)mysql账户密码错误
(4)mysql主从机配置文件写错
(5)配置从机连接语法错误
(6)主机未开放账户连接权限
还有一种很奇怪的情况就是,我必须得再Navicat上把那个角色登录连接一下,他的状态才会从connection变成Yes
二、Slave_SQL_Running = NO
这种情况一般得看报错的日志,在输出中找到 Last_SQL_Error 部分,看看是报什么错误
错误一
Last_SQL_Error = Error ‘Character set ‘#255’ is not a compiled character set and is not specified in the ‘C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\Index.xml’ file’ on query. Default database: ‘db1’. Query: ‘create database db1’
经过我排查 一般这种就是数据库版本一一样导致的,我最开始主库是8.0,副库是5.7就遇到过这样的问题,后面改了Index.xml这个文件后也没有改变结果。我就把主库也改成5.7就好了。
错误二
Replica I/O for channel ‘’: Error connecting to source ‘root@192.168.8.191:3306’. This was attempt 3/86400, with a delay of 60 seconds between attempts. Message: Can’t connect to MySQL server on ‘192.168.8.191:3306’ (111), Error_code: MY-002003
这种就是身份的验证问题了,可以在mysql里面输入下面的代码就可以解决;
GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'your_host' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
大致就这些吧,还有好多问题也都遇到了,有点忘记了等想起来再加进去吧,或者你们评论问一下也可以,我看到了会回复