一、配置mysql主从同步的步骤:
(1) 在主服务器上,必须开启二进制日志机制和配置一个独立的ID
(2) 在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号
(3) 在开始复制进程前,在主服务器上记录二进制文件的位置信息
(4) 如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
(5) 配置从服务器要连接的主服务器的IP地址和登陆授权,二进制日志文件名和位置
示例:以ubuntu的MySQL(5.7.22)作为主机 ,使用Dokcer安装的MySQL作为从机
二、安装、配置主从服务Mysql服务器
1、安装MySQL主机
1. sudo apt-get install mysql-server2. apt-get isntall mysql-client3. sudo apt-get install libmysqlclient-dev
2、安装MySQL从机
在docker里面安装mysql的镜像, 此版本的镜像,尽量和MySQL主机版本一致
(1)可以从docker官方拉取镜像 :
docker image pull mysql:5.7.22
(2)本地已有docker的镜像可以直接安装:
docker load -i mysql_docker_5722.tar
3、指定从机配置文件
运行mysql docker镜像,需要在宿主机中建立文件目录于mysql容器保存数据和读取配置文件。
在家目录下创建mysql_slave文件夹, 放入mysql的配置文件,
这里最后一行命令是直接复制主机mysql的配置文件, 再去修改就可以了
cd ~
mkdirmysql_slave
cd mysql_slavemkdirdatacp -r /etc/mysql/mysql.conf.d ./ #将位于/etc的mysql主机的配置文件拷到家目录下,修改后作为从机的配置文件
4、配置从机
将docker运行的mysql作为slave运行, 开启前需配置文件
修改port , server-id和主机做区分, 主机分别是3306, 1 , 另外不开启日志
sudo vim ~/mysql_slave/mysql.conf.d/mysqld.cnf
port= 8306 # 区别开主服务器的3306,定义为8306general_log= 0server-id = 2 #主服务器id设为1,从服务器只要不是1都行,这边取2
5、创建docker容器
创建docker容器, MYSQL_ROOT_PASSWORD 是创建mysql root用户的密码,指定ubuntu和docker里面映射的路径(-v后面就是指定的映射路径),详细命令如下:
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/python/mysql_slave/data:/var/lib/mysql -v /home/python/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
测试, 在ubuntu中使用mysql命令尝试连接docker容器中的mysql
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
接下来备份初始主服务器的内容到从服务器(冷备份),后续的主从同步(热备份)则通过二进制日志来传输:
三、备份数据及主从同步配置
1、冷备份
1.登录到MySQL主机,收集数据
mysqldump -uroot -pmysql --all-databases --lock-all-tables > ~/master_db.sql
2.登录到MySQL从机,同步数据
mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
2、配置主机Mysql
编辑设置mysqld的配置文件, 设置log_bin 和server_id
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 1log_bin= /var/log/mysql/mysql-bin.log
重启主机mysql服务
sudo service mysql restart
3、热备份:主从同步
(1)、登入主服务器Ubuntu中的mysql,创建用于从服务器同步数据使用的帐号, 这里是slave
mysql –uroot –pmysql
GRANT REPLICATION SLAVE ON*.* TO 'slave'@'%' identified by 'slave';#*.*表示所有表,第一个slave表示账号,第二个slave表示密码
FLUSH PRIVILEGES;
(2)、获取主服务器的二进制日志信息, 查看File , Position
File为使用的日志文件名字,Position为使用的文件位置,这两个参数须记下,配置从服务器时会用到。
SHOW MASTER STATUS;
(3)、进入docker中的mysql配置从服务器的slave:
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
执行:
change master to master_host='127.0.0.1', master_user='slave', master_password='slave',master_log_file='mysql-bin.000006', master_log_pos=590;
说明:
master_host:主服务器Ubuntu的ip地址
master_log_file: 前面查询到的主服务器日志文件名======File
master_log_pos: 前面查询到的主服务器日志文件位置======Position
(4)、这时候已经配置完成, 尝试启动slave服务器, 并查看同步状态
start slave;
show slave status \G
如果 显示Slave_IO_Running :Yes, Slave_SQL_Running: Yes 表示同步已经正常运行
转自:https://blog.csdn.net/skyjianwei/article/details/81058205