实验环境
ubuntu-16.04.1
mysql 5.7.16
xshell_5.0.0.37
VirtualBox 5.0.24.8355
Navicat 9
实验步骤
1.首先创建一个mysql的用户,用户、密码都为ubuntu,并且允许远程访问。
GRANT ALL PRIVILEGES ON *.* TO 'ubuntu'@'%'IDENTIFIED BY 'ubuntu' WITH GRANT OPTION;
FLUSH PRIVILEGES;
2.在mysql的配置文件中加入配置,目录为/etc/mysql/my.cnf
#master节点
[mysqld]
#mysql的数据目录
#datadir=/mydata/data
#主服务器二进制日志文件前缀名
log-bin=master-bin
# 索引文件
log-bin-index=master-bin.index
# 开启innodb的一表一个文件的设置
innodb_file_per_table=1
# 必须是唯一的
server-id=112
#slave节点
[mysqld]
#mysql的数据目录
#datadir=/mydata/data
#禁用二进制日志,从服务器不需要二进制日志文件
#log-bin=mysql-bin
#设置中继日志
relay-log=relay-log
#中继日志索引
relay-log-index=relay-log.index
# 开启innodb的一表一个文件的设置
innodb_file_per_table=1
#id不要和主服务器的一样
server-id=113
注意:server-id要为唯一
3.进入用户名为ubuntu的master节点mysql,输入下面命令查看。
master statusshow master status\G
注意:我们这里需要记下File,Position的指之后再slave节点中需要进行配置。
4.进入用户名为ubuntu的slave节点mysql,输入下面命令查看。
show slave status;
查看slave节点的状态
change master to master_host='192.168.3.112',master_user='ubuntu',master_password='ubuntu',master_log_file='master-bin.000001',master_log_pos=154;
添加复制数据的主服务器ip、用户和密码。以及二进制日志名和复制位置
add slaveslave status errorstart slave;#运行
stop slave;#停止
5.一般的来说上述操作就能完成主从复制,但是,我这里还是没有成功,Slave_IO_Running:NO
并且下方有报错:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work
这里它说UUID重复,网上一般说server-id要求唯一,没有注意server-uuid,因为他们大多都是自己在每一台机器上面独立安装mysql的,我偷懒在虚拟机中克隆了一下,并且是在克隆之前安装完成了的mysql,所有生成的uuid会一样。
6.那么我们就需要将server-uuid搞成不一样的,但是我一开始并没有设置datadir,原来的配置文件也找不到这个选项。
可以进入mysql中查找datadir,类似server-id,server-uuid的值也都能找到
show variables like 'server_id';
show variables like 'server-uuid';
show variables like 'datadir';
7.找到datadir的位置为/var/lib/mysql/,查看auto.cnf文件,他们的server-uuid的配置文件果然一样
master server-uuidslave server-uuid
8.将其中的一台机器的auto.cnf文件备份一份,以防万一。
mv auto.cnf auto.cnf.bk
之后重启mysql
sudo service mysql restart
那么随着mysql的重启原来的auto.cnf没有了,mysql就会将它重新生成一个新的auto.cnf。
9.进入slave查看slave status
slave status success10.测试一下是不是能实现主从复制
master beforeslave before
master aftercreate database test;
slave after
这样就实现了主从复制了。
网友评论