数据库主从同步配置(小白教学)

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账户进入mysqlmysql –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

以上是关于数据库主从同步配置(小白教学)的主要内容,如果未能解决你的问题,请参考以下文章

Redis主从复制原理详解,小白也能看懂!!!

Mysql的主主备份与主从备份--同步

MySQL主从同步配置

Mariadb数据库之主从复制同步配置实战

8.31 MySQL主从配置准备工作配置主配置从测试主从同步

如何配置两个MySQL数据库之间的主从同步功能?