html
主从同步使得数据能够从一个数据库服务器复制到其余服务器上,在复制数据时,一个服务器充当主服务器(master),其他的服务器充当从服务器(slave)。由于复制是异步进行的,因此从服务器不须要一直链接着主服务器,从服务器甚至能够经过拨号断断续续地链接主服务器。经过配置文件,能够指定复制全部的数据库,某个数据库,甚至是某个数据库上的某个表。mysql
Mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变更状况,从服务器经过读取和执行该日志文件来保持和主服务器的数据一致。sql
在使用二进制日志时,主服务器的全部操做都会被记录下来,而后从服务器会接收到该日志的一个副本。从服务器能够指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的全部语句。docker
有不少种配置主从同步的方法,能够总结为以下的步shell
在主服务器上,必须开启二进制日志机制和配置一个独立的ID 开启方法数据库
在每个从服务器上,配置一个惟一的ID,建立一个用来专门复制主服务器数据的帐号ubuntu
在开始复制进程前,在主服务器上记录二进制文件的位置信息bash
若是在开始复制以前,数据库中已经有数据,就必须先建立一个数据快照(可使用mysqldump导出数据库,或者直接复制数据文件)服务器
配置从服务器要链接的主服务器的IP地址和登录受权,二进制日志文件名和位置异步
案例:将腾讯云服务器上的mysql备份到本地服务器中。
远程腾讯云服务mysql------------------------主
本地服务器daocker容器中的mysql -------从
第一步:
在本地服务器中的docker容器中安装 mysql_docker镜像(mysql_docker_5722.tar文件地址 提取码:f9np)
将镜像文件下载到本地,而后经过工具上传到本地服务器中(我使用的是如下工具进行上传和下载直接拖拽便可完成)
使用xshell进入本地服务器中查看文件是否上传到了home/ubuntu目录下
第一步:
仍是在本地服务器中使用docker安装镜像,执行 docker load -i mysql_docker_5722.tar
检查镜像是否安装成功。
第二步:
在本地服务器中建立一个用于备份的虚拟环境
第三步:
在远程腾讯云服务器中的/home/ubuntu目录中建立一个mysql_slave目录,进入该目录在建立一个data目录
第四步:
将远程腾讯云服务器中的mysql配置信息复制到上面建立的mysql_slave目录中 执行命令:cp -r /etc/mysql/mysql.conf.d ./
第五步:
进入mysql.conf.d目录中对mysqld.cnf文件进行编辑(注意,这里我复制过来的全部配置至关于从服务器中的配置,由于后面我会将整个mysql_slave文件夹传到我本地服务器中)
修改内容以下:
注意server-id 必定不能重复
第六步:
接下来,咱们就将上述mysql_slave文件夹传到我本地服务器中(经过下面的软件将mysql_slave下载到电脑本地,而后在经过这个软件上传到本地的Linux系统)
第七步:
在本地Linux系统中建立docker容器
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/ubuntu/mysql_slave/data:/var/lib/mysql -v /home/ubuntu/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
第八步:
测试上面建立的容器查看原始数据库中信息
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
第九步:
备份主服务器原有数据到从服务器
在远程腾讯云服务器中执行数据库备份命令:备份主服务器原有数据到从服务器$ mysqldump -u用户名 -p密码 --all-databases --lock-all-tables > ~/master_db.sql
--lock-all-tables :执行操做时锁住全部表,防止操做时有数据修改
~/master_db.sql :导出的备份数据(sql文件)位置,可本身指定
同时将主服务器中备份的master_db.sql文件上传到本地Linux系统中
先从远程腾讯云服务器(主)下载到本地
在从本地上传到Linux系统中(从)
第十步:
进入本地服务器(从)在docker容器中导入数据:mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
执行完成后,主数据库内容就备份到了从服务器中
第十一步:
登入远程腾讯云主服务器Ubuntu中的mysql,建立用于从服务器同步数据使用的账号
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'Slave@mysql520';
刷新权限
FLUSH PRIVILEGES;
第十二步 获取主服务器的二进制日志信息
show variables like 'log_bin';
SHOW MASTER STATUS;
SHOW MASTER STATUS;
第十三步:
在本地Linux系统中进入docker中的mysql,执行如下命令
change master to master_host='远程服务器IP(主)', master_user='上面建立受权的用户名', master_password='上面建立受权的密码',master_log_file='对应上面File', master_log_pos=对应上面的Position;
master_log_file: 前面查询到的主服务器日志文件名
master_log_pos: 前面查询到的主服务器日志文件位置
第十四步:
启动slave服务器,并查看同步状态
start slave; show slave status \G
检查状态:show slave status \G
若是标记的地方两个参数都是yes说明就启动成功了。
后面就能够测试了,在远程的服务器mysql中建立库获取操做表,再到本地查看是否也发生变化。只要数据库内容保持一致,说明就配置成功了。