数据库主从同步配置(小白教学)
Posted dreamspy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库主从同步配置(小白教学)相关的知识,希望对你有一定的参考价值。
主从同步意义?
主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。
使用主从同步的好处?
通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
提高数据安全,因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能
机制?
mysql服务器之间的主从同步是基于二进制日志机制,主服务器使用二进制日志来记录数据库的变动情况,从服务器通过读取和执行该日志文件来保持和主服务器的数据一致。
在使用二进制日志时,主服务器的所有操作都会被记录下来,然后从服务器会接收到该日志的一个副本。从服务器可以指定执行该日志中的哪一类事件(譬如只插入数据或者只更新数据),默认会执行日志中的所有语句。
配置主从同步的基本步骤?
在主服务器上,必须开启二进制日志机制和配置一个独立的ID
在每一个从服务器上,配置一个唯一的ID,创建一个用来专门复制主服务器数据的账号
在开始复制进程前,在主服务器上记录二进制文件的位置信息
如果在开始复制之前,数据库中已经有数据,就必须先创建一个数据快照(可以使用mysqldump导出数据库,或者直接复制数据文件)
太多的介绍可能也是看不下去,反正总结起来就是一句话,为了防止员工删库(携程事件),数据库主从配置已经提上了日程。说些题外话:阿里前几天有位机房网络波动,导致一些用户登录困难。有些人就想把自己的花呗荡没了,只能说这是不可能的。要灭了阿里的数据库堪比抢银行,一个大的公司数据库一般都做了备份并且有专人看守,并且投入的资金是你无法想象的。如果真的想让你的花呗荡没了,你可以试试!
好了,话不多说,我们开始配置我们的数据库吧(前提是将docker安装好)
第一步:镜像拉取
1.如果你的家目录环境下已经有了mysql的压缩包,可以直接拉取
docker load -i mysql_docke.tar
2.直接从库下载,查找有无镜像(https://hub.docker.com/)
docker image pull mysql:5.7.22
运行mysql docker镜像,需要在宿主机中建立文件目录用于mysql容器保存数据和读取配置文件。
在家目录中(/home/python)中创建目录,将mysql的配置文件放到此目录中
第二步:创建从数据库的相应文件
在运行这步时,你需要前去主数据库的配置文件查看他是否开启了日志权限
vim /etc/mysql/mysql.conf.d/mysqld.cnf
查看bin_log该行是否注销,若是注销的,则需要将它取消注销:因为该文件是只可查看的所以在保存的时候,需要用到的命令:w !sudo tee %
在修改好配置文件后,需要重启mysql:systemctl restart mysql
# 回到家目录
cd ~
# 创建名为mysql_slave的文件夹
mkdir mysql_slave
# 移动到文件夹下
cd mysql_slave
# 创建data文件用来存储后面的数据
mkdir data
# 在当前目录下将主表的配置文件进行复制
cp -r /etc/mysql/mysql.conf.d ./
第三步:修改复制过来的mysqld.cnf文件
vim mysqld.cnf
在里面将port改为8306(因为主数据库的port为3306所以我们之前配置mysql时才一直使用3306作为mysql的端口号),将general两行注销,然后将server_id 改为2以上操作如果在复制过来的文件里都已经注销,则需要去主数据库重新配置将他们取消注销
第四步:创建docker容器
-e 传入的环境变量参数
/home/pyvip/mysql_slave/data:/var/lib/mysql 把mysql默认存储数据文档目录映射到data里面
/home/pyvip/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d 把配置文件映射进去
最后面为版本号,根据自己的mysql镜像来
docker run --name mysql-slave -e MYSQL_ROOT_PASSWORD=mysql -d --network=host -v /home/pyvip/mysql_slave/data:/var/lib/mysql -v /home/pyvip/mysql_slave/mysql.conf.d:/etc/mysql/mysql.conf.d mysql:5.7.22
当创建完成后,进行测试,使用mysql命令来查看是否创建成功:
mysql -uroot -pmysql -h 127.0.0.1 --port=8306
第五步:备份主服务器原有数据到从服务器
# 退出mysql界面
mysqldump -uroot -pqwe123 --all-databases --lock-all-tables > ~/master_db.sql
--all-databases :导出所有数据库
--lock-all-tables :执行操作时锁住所有表,防止操作时有数据修改
~/master_db.sql :导出的备份数据(sql文件)位置,可自己指定
第六步:在docker容器中导入数据
mysql -uroot -pmysql -h127.0.0.1 --port=8306 < ~/master_db.sql
第七步:回到主数据库,创建用户从服务器同步数据使用的账号
# 用root账户进入mysql
mysql –uroot –pqwe123
# 创建用户和密码
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
# 刷新权限
FLUSH PRIVILEGES;
第八步:获取主服务器的二进制日志信息
SHOW MASTER STATUS;
当输入这行命令是,会返回两个参数,请记住这两个参数后面会用到
第九步:配置从服务器slave(docker中的mysql)
# 进入从表
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_log_file: 前面查询到的主服务器日志文件名(这个改为上面命令出现的第一个数据)
master_log_pos: 前面查询到的主服务器日志文件位置(这个改为第二个数据)
第十步:启动slave,并查看同步状态
start slave;
show slave status \G
ok,如果你顺利完成了上面的步骤,那么就说明你的数据库主从配置已经完成了,你可以在主表进行任何操作,从表就会做出相应的操作。docker的一个冰山小角已经被我们发掘起来,其他的方向就等你自己去探索啦!例如:elasticsearch
以上是关于数据库主从同步配置(小白教学)的主要内容,如果未能解决你的问题,请参考以下文章