搭建的环境1主1从:MySQL_1作为主服务器ip:192.168.254.129,Mysql_2作为从服务器ip:192.168.254.130
首先准备好2台安装好Mysql5.7的服务器,安装过程可以查看这个链接:https://www.dcr163.cn/519.html
这里我是使用的VMware Workstation 这个虚拟机软件,首先在centos7上安装好1台mysql5.7之后,这里命名虚拟机为Mysql_1,克隆1份Mysql_1虚拟机出来,命名为Mysql_2。
依次打开这2台mysql服务器,因为是克隆出来的,Mysql_2的Mysql软件UUID是和第1台一样的,这里我们需要更改一下Mysql_2的UUID。
使用SSH工具连接到Mysql_2服务器上,先连接进入mysql服务
[root@mysql1 ~]# mysql -uroot –p
查询出自己的UUID
mysql> SELECT UUID();
上面可以看到,这个是本机的UUID,复制这一串UUID,我们退出mysql
mysql> quit
修改Mysql_2的UUID
进入到安装目录下的data目录
[root@mysql1 ~]# cd /usr/local/mysql/data/
编辑修改auto.cnf这个文件,UUID就定义在这个文件内,把刚刚复制出来的UUID,替换掉旧的
[root@mysql1 data]# vim auto.cnf
保存并且退出,我们重新启动一下mysql服务
[root@mysql1 data]# /etc/init.d/mysqld restart
到这一步,我们的mysql_2就暂时准备好了。
开始配置mysql主从环境
先配置主服务器master,这里我们是Mysql_1,需要新增一些配置信息:
server-id=1 #这个类似一个唯一的标示,不能重复,最好是和自己的ip一致
log-bin=mysql-bin # 启用二进制日志
#两个可选参数(2选1)
binlog-do-db=mydb #需要同步的库 多个格式 db1,db2 ,这里我们同步的是mydb这个数据库
binlog-ignore-db= #忽略不同步的库
[root@mysql1 ~]# vim /etc/my.cnf
保存后重启Mysql_1的mysql服务
[root@mysql1 ~]# /etc/init.d/mysqld restart
在Mysql_1上创建刚刚我们指定的那个数据库,我们是使用的utf8mb4字符集:
[root@mysql1 ~]# mysql -uroot -p
mysql> CREATE DATABASE `mydb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
在Mysql_1上创建一个同步的账号,给从服务器使用
mysql> grant replication slave on *.* to 'repl'@'192.168.254.%' identified by '654321';
mysql> flush privileges;
上面我们创建了一个 repl账号,密码为:654321,只能在192.168.254.* 这个网段的客户端链接,请根据自己的环境需求修改自己对应的ip。
先锁表,不让数据写入,防止配置同步的时候数据不一致
mysql> flush tables with read lock;
查看主服务器的状态,并且记录二进制文件File和Position,这个配置从服务器的时候需要用到。
mysql> show master status;
备份mydbd的数据库,先退出mysql客户端
mysql> quit
[root@mysql1 ~]# mysqldump -uroot -p mydb>mydb.sql
把备份好的数据库拷贝到从服务器上的/root目录下,记得把从服务器的ip改成自己环境下的
[root@mysql1 ~]# scp mydb.sql 192.168.254.130:~
配置从服务器slave,我们这里是Mysql_2
新建一个和主服务器同样的库
mysql> CREATE DATABASE `mydb` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
导入主服务器备份的数据sql
mysql> use mydb
Database changed
mysql> sourece /root/mydb.sql
修改配置文件,需要新增一些配置信息:
server-id=2 #这个类似一个唯一的标示,不能重复,最好是和自己的ip一致
log-bin=mysql-bin # 启用二进制日志
#两个可选参数(2选1)这两个参数设置成和主一样
binlog-do-db=mydb #需要同步的库 多个格式 db1,db2 ,这里我们同步的是mydb这个数据库
binlog-ignore-db= #忽略不同步的库
#设置只读,从服务器不给写入,这个不影响数据同步
read_only = 1 #普通用户设置只读
super_read_only = 1 #超级用户设置只读
[root@mysql1 ~]# vim /etc/my.cnf
保存退出后重启mysql服务器
[root@mysql2 ~]# /etc/init.d/mysqld restart
登陆Mysql_2客户端,配置slave
[root@mysql2 ~]# mysql -uroot –p
执行以下命令, (根据mysql官方手册的说明,5.5之前是slave stop,5.6之后改为stop slave)
mysql> stop slave;
mysql> change master to master_host='192.168.254.129', master_user='repl', master_password='654321',master_log_file='mysql-bin.000001', master_log_pos=815;
-- (master_log_file和master_log_pos填上刚才记录下的二进制日志文件名和位置)
mysql> start slave;
查看从服务器的状态:
mysql> show slave status G;
从服务器配置完成后,取消主服务器Mysql_1的锁表操作;
mysql> unlock tables;
查看验证主从配置的效果
在主服务器Mysql_1上创建一张a1表
CREATE TABLE `a1` (
`id` INT(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
`title` CHAR(20) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
写入一条数据
mysql> INSERT INTO a1 (title) VALUES ('不如吃茶去');
去从服务器Mysql_2看看有没有同步
mysql> use mydb;
mysql> show tables;
mysql> SELECT * FROM a1;
多添加几条记录,删除一条记录,发现从服务器也能正常的同步;主从配置就这样完成了,写数据只能在主服务器中写,从服务器只能读取!