主从同步大体的原理是:主服务器(master)进行的操作将会被记录在Binary日志文件中,从服务器(slave)创建一个IO线程把Binary日志文件中的数据写入自身Relay日志文件中。因此主服务器需要开启Binary日志文件,从服务器需要开启Relay日志文件,主服务器中的MySQL每次操作都会记录到Binary日志文件中。
用之前的一台docker搭建的mysql服务器作为主服务,另外重新再准备一台服务器搭建mysql来做同步。
准备
现准备一台服务器,安装mysql服务
下载安装
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
yum install mysql-community-server
service mysqld start
修改密码
#修改配置文件
vi /etc/my.cnf
[mysqld]
skip-grant-tables
#退出
service mysqld retstart
mysql -uroot
mysql>use mysql;
mysql>update user set password = password('new password') where user='root';
mysql>flush privileges;
mysql>exit;
sed -i '/skip-grant-tables/d' /etc/my.cnf
service mysqld restart
docker中mysql(master)配置
进入容器
#docker_mysql是容器名称
docker exec -it docker_mysql bash
#容器内安装vim
apt-get update
apt-get upgrade
apt-get install vim
修改配置文件
cd /etc/mysql
vim my.cnf
#添加如下配置
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
#配置完成后需要重启
service mysql restart
#重启容器
exit
docker start docker-mysql
创建用于同步的用户'slave',并给予REPLICATION SLAVE、REPLICATION CLIENT同步权限
docker exec -it docker_mysql bash;
mysql -uroot -p'password'
mysql>CREATE USER 'slave'@'%' IDENTIFIED BY 'password';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
mysql> flush privileges;
服务器中mysql(slave)配置
/etc/my.cnf增加配置如下
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
链接master和slave
进入mysql(master),执行show master status;
进入mysql(slave),执行
change master to master_host='149.28.28.145', master_user='slave', master_password='password', master_port=3306,master_log_file='mysql-bin.000001', master_log_pos=769, master_connect_retry=30;
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
查询slave状态,正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。
mysql>show slave status;
002.PNG
开启slave,再次查询SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。
mysql>start slave;
mysql>show slave status;
003.PNG
此时主从同步已开启,可以进行测试,在master中创建一个数据库,再检查slave中是否存在该数据库
master
master.PNG
slave
slave.PNG
网友评论