MySQL/MariaDB主从复制教程
前言
自己的网站前几天遭遇了cc攻击,才考虑到数据库及时备份的重要性,数据库更新比较频繁的情况下,每日定时备份可没办法应对突发情况,自然想到了主从复制,学着弄了下,正好也总结一下自己在生产环境操作的过程,以便日后再用。
主从复制机制实现原理:
正文
一、前提
- 两台安装有mysql/mariadb的服务器,一台为master,一台为slave。
- 主(master)机需要开放相应的数据库端口,默认3306;
- 主从复制,顾名思义从master机到slave机的单向同步,这点明白即可。
二、master机配置
编辑mysql配置 vim my.cnf
,my.cnf位置自行确定,确保以下配置存在:
1 |
|
保存配置后重启mysql,通过ssh进入mysql命令行
1 |
|
新建slave用户,指定对应slave机ip和设置密码,并刷新权限,后面会用到
1 |
|
重启mysql后再次进入mysql命令行,查看master状态
1 |
|
看到File以及Position,说明bin-log是在运行的,记录其中的 mysql-bin.00029
和 13925115
,每个人的数据不一样
这里有两个场景:
- master机和slave机都是新机,没有任何数据,此时就可以跳过下面这一步
- 我需要备份master机所有的数据库到slave,但是我的slave机刚搭建mysql,master机上有数据,这时候你就需要备份导出master机的数据库并还原到slave机,确保主从机数据的一致性,如果你的master机上的数据一直有变动(通过
show master status;
观察Position值),那么你需要确保备份导出前后Position值是一致的。这时候你可能需要采取锁全表操作,或者你想赌一把,能确保备份前后Position值不变也是可以的。
三、slave机配置
slave机也一样要配置my.ini
1 |
|
重启mysql后查询server-id,确保server-id大于主机的server-id
1 |
|
通过mysql -uroot -p密码
进入mysql命令行,执行以下sql,把master机IP,上一步设置的mysql账号密码,记录的File值填入master_log_file,Position值填入master_log_pos:
1 |
|
然后执行启动slave:
1 |
|
查看slave状态:
1 |
|
Slave_IO_Running 和 Slave_SQL_Running 必须都为 Yes 才算成功:
四、验证
master数据库进行更新或删除操作之后,查看slave数据库是否同步即可。
如需关闭主从复制,可在从机上运行以下sql语句进行关闭:
1
2>stop slave; #关闭从机复制
>reset slave; #重置从机relay-binlog
MySQL/MariaDB主从复制教程
https://aunero.github.io/2023/04/mysql-master-slave-copy.html