下面演示的主从案例皆以mysql5.7.30版本为主,亲测有效
1)首先准备两台服务器:
主服务器:192.168.124.38
从服务器:192.168.124.39
2)在主服务器上创建我们演示的数据库
mysql -uroot -p -e"create database mycat_db"
3)将提前准备好的数据库文件导入到我们的数据库中
mysql -uroot -p mycat_db < mycat_db.sql
4)开启我们主从的配置,找到mysql的配置文件
vim /etc/my.cnf
开启主从配置,(这里主库和从库都需要配置一下,主库:server-id=1;从库:server-id=2)
log-bin=mysql-bin server-id=1
5)备份我们的数据库
mysqldump --master-data=2 --single-transaction --routines --triggers --events -uroot -p mycat_db > bak_mycat_db.sql
6)将我们的备份sql远程传到我们的从数据库节点的root目录下
scp bak_mycat_db.sql root@q92.168.124.139:/root
7)从服务器上创建我们的数据库
mysql -uroot -p -e"create database order_db"
8)导入我们之前主库备份下来的数据
mysql -uroot -p order_db < bak_mycat_db.sql
9)回到主库,我们创建一个用来主从同步复制的账号
create user 'im_repl'@'192.168.124.%' identified by '123456';
10)对我们创建的账号进行授权
grant replication slave on *.* to 'im_repl'@'192.168.124.%';
11)在从库上创建我们主从同步的链路
change master to MASTER_HOST="192.168.124.38",
MASTER_USER ="im_repl",
MASTER_PASSWORD ="123456",
MASTER_LOG_FILE ="mysql-bin.000001",
MASTER_LOG_POS =625;
我们可以使用命令在主库查看上面配置的MASTER_LOG_FILE ="mysql-bin.000001",MASTER_LOG_POS =625;的位置
show master status
12)查看我们创建的链路
show slave status \G
13)因为我们主从库的名字现在是不一样的,所以需要添加一个链路的过滤
change replication filter replicate_rewrite_db=((mycat_db,order_db));
这样我们就可以将主库mycat_db的数据同步到从库order_db上了
再次查看我们的链路状态
show slave status \G
14)启动我们的主从复制的从库链路
start slave;
再次查看我们的从节点
show slave status \G
【Slave_IO_Running】没有启动成功
其实下面也提示了错误的信息
意思是我们两台主从服务器的UUIDs是相同的,出现这种情况也是因为本地在安装mysql的时候,安装好一台系统之后,直接将整个操作系统又克隆了一份,避免了第二次的安装,所以才会重复,这才导致
15)解决
既然相同那么我们找到从服务器的做一下修改就可以了
cd /var/lib/mysql
vim auto.cnf
随意更改一下这个id
重启一下mysql
service mysqld restart
再次查看我们主节点的 日志位置:
show master status \G
修改我们从节点:
change master to MASTER_LOG_FILE ="mysql-bin.000004",MASTER_LOG_POS =468;
因为我们的两个库名不同,需要再次创建 一下链路过滤
change replication filter replicate_rewrite_db=((mycat_db,order_db));
然后启动我们的slave节点
start slave;
启动成功
16)校验
分别用客户端来连接两个数据库
修改主库表中的任意一条数据,从库直接刷新一下便可以看到数据已经同步过来了
至此我们的主从数据库的配置成功