Linux下实现Mysql的主从复制
前言
- 本篇是基于CentOs7下,以及mysql8的版本进行配置主从复制
条件准备
- 已经安装好CentOs7系统的虚拟机两台
- 两台虚拟机上都配置好了ip地址以及都安装好了mysql数据库
- 第一台虚拟机的ip : 192.168.226.129
- 第二台虚拟机的ip : 192.168.226.130
配置主库
- 任选一个虚拟机上的mysql作为主库,假设我选择ip地址为192.168.226.129的这台虚拟机上的mysql作为主库,选择ip地址为192.168.226.130的这台虚拟机上的mysql作为从库
配置主库步骤:
1. 配置主库的配置文件
- 一般来说mysql的配置文件都存放在/etc目录下,叫做my.cnf,但是mysql8默认是没有这个文件的,如果没有的话,需要自己手动创建,配置文件的内容在Linux下安装mysql里面有,使用命令:
vim /etc/my.cnf
- 添加以下内容在[mysqld]下
log-bin=mysql-bin #开启二进制日志
server-id=100 #服务器唯一标识,id不一定要是100,可以自定义数字,只要保证主库和从库的id不一样就行。
2.重新启动mysql服务
systemctl restart mysqld
3.在主库中创建一个用户,用于进行主从库之间通信
需要分两步进行:
第一步:create user 用户名 identified with 'mysql_native_password'by '密码';
创建一个用户
第二步:grant replication slave on *.* to 用户名;
给该用户授权
//登录主库,并输入主库密码
mysql -uroot -p
//创建一个用户,作为信任用户进行主从库之间通信
mysql> create user xiaoming identified with 'mysql_native_password'by 'Root@123456';
mysql> grant replication slave on *.* to xiaoming;
//刷新
mysql> flush privileges;
4.执行以下Sql,记录下File和Position的值
//查看主库状态
mysql> show master status;
这里的File = mysql-bin.000003 , Position = 50483
到这里之后,主库就最好不要再动了,现在去配置从库。
配置从库
配置从库步骤:
1.配置从库的配置文件
- 一般来说mysql的配置文件都存放在/etc目录下,叫做my.cnf,但是mysql8默认是没有这个文件的,如果没有的话,需要自己手动创建,配置文件的内容在Linux下安装mysql里面有,使用命令:
vim /etc/my.cnf
- 添加以下内容在[mysqld]下
注意:从库只需要配置server-id ,不需要配置log-bin,且需要保证主从库的server-id不一样就行了
server-id=101 #服务器唯一标识,id不一定要是100,可以自定义数字,只要保证主库和从库的id不一样就行。
2.重新启动mysql服务
systemctl restart mysqld
3.登录进去之后,配置关于主库的信息
- 我们需要告诉从库关于主库的信息,这样它才知道复制哪个库
//登录从库,并输入从库密码
mysql -uroot -p
// 关键:在从库中配置主库的信息
mysql> change master to master_host='192.168.226.129',master_user='xiaoming',master_password='Root@123456',master_log_file='mysql-bin.000003',master_log_pos=50483;
注意:这句change命令中
master_host : 填写主库的所在linux的ip地址
master_user : 填写主库中创建的那个用于主从库之间通信的用户名
master_password : 填写主库中创建的那个用于主从库之间通信的用户密码
master_log_file : 填写主库中我们记录下来的File的值
master_log_pos : 填写主库中我们记录下来的Position的值
- 执行完成之后,可能会报错,就是说已经有一个线程在执行了,需要先执行命令
stop slave;
,如果没报错则直接忽略本句 - 接着执行命令
start slave;
命令来开启从机的IO - 最后,来查看是否配置成功:执行命令
show slave status;
,该命令会返回一个表格 - 其中:
结果只要显示 :
Slave_IO_State 为:Waiting for master to send event
Slave_IO_Running 为:Yes
Slave_SQL_Running 为:Yes
则说明配置没啥问题
测试是否主从复制有效
步骤:
- 在两个库中分别执行下面的命令,打开端口3306
//这是直接开启3306端口
[root@localhost bin]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
//重新加载一下防火墙
[root@localhost bin]# firewall-cmd --reload
//查看当前防火墙开放的端口号
[root@localhost bin]# firewall-cmd --zone=public --list-ports
2.使用MysqlWorkbench分别连接主库和从库
输入对应linux的地址,以及数据库的密码,点击确定
- 在主库的user表中插入一条数据
- 到从库中的user表中查看该数据是否加上了
- 显示也有该条记录,说明配置主从复制成功!