mysql 中的备份恢复、分区分表、主从复制、读写分离

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 数据库 mysql 的灾难恢复,高并发必备知识

🎈  mysql 的备份和恢复

  • 创建备份管理员
  • 创建备份管理员,并授予管理员相应的权限
  • 备份所需权限:select,reload,lock tables,replication client,show view,event,process
# 创建管理员
create user 'backup'@'localhost' identified by'123456';# 给管理员授权
grant select,reload,lock tables,replication client,show view,event,process on*.* to 'backup'@'localhost';
  • sql 文件恢复之全量恢复
  • 只要将备份的 sql 文件直接导入数据库即可
mysql -uroot -p 数据库 < sql文件
  • sql 文件恢复之基于时间点的恢复
# 首先进行一次基于最近一次的全量备份的文件进行一次全量恢复
mysql -uroot -p 数据库 < sql文件
# 然后查看备份的sql文件的 CHANGE MASTER 值,基于该值进行二进制日志的还原
CHANGE MASTER TO MASTER_LOG_FILE='binlog.000007', MASTER_LOG_POS=154;# 查看二进制日志,根据时间点找到误操作前一段时间的二进制日志
cd /var/lib/mysql
mysqlbinlog --base64-output=decode-rows -vv --start-position=154 --database=数据库名 binlog.000008 | grep -B3 DELETE | more# 记录最早删除记录的节点值,执行日志导出
mysqlbinlog --start-position=开始节点 --stop-position=结束节点 --database=数据库 二进制日志名 > 导出的sql文件名mysqlbinlog --start-position=154 --stop-position=26158 --database=laravel binlog.000007 > laravel.sql# 对导出的sql文件进行全量的还原
mysql -uroot -p 数据库 < sql文件
  • mysqldump逻辑备份
  • 指定数据库多个表进行备份:mysqldump [OPTIONS] database [table]
  • 指定多个数据库备份:mysqldump [OPTIONS] database [OPTIONS] DB1 DB2
  • 整个数据库实例进行备份:mysqldump [OPTIONS] --all-database [OPTIONS]
  • 参数 --single-transaction:开启事务保证备份数据的完整性,innodb 特有
  • 参数 -l或--lock-tables:依次锁定备份数据库所有表保证备份数据的完整性
  • 参数 -x或--lock-all-table:一次性锁定整个数据库实例所有数据表保证数据完整性
  • 参数 --master-data=[1/2]CHANGE MASTER TO 语句会被写成一个 sql 注释;1不会被写成注释,2写成注释,默认1
  • 参数 -R或--routines:备份数据库存储过程
  • 参数 --triggers:备份数据库触发器
  • 参数 -E或--events:备份数据库调度事件
  • 参数 --hex-blob16进制导出bit列和blob列数据 避免数据文本不可见
  • 参数 --tab=path:指定路径下为每个数据库生成两个文件:数据结构数据
  • 参数 -w或--where=过滤条件:过滤指定数据,仅支持单表导出
  • 注意:--single-transaction--lock-tables 参数是互斥的,所以,如果同一个数据库下同时存在 innodb 表和myisam表只能使用 --lock-tables 来保证备份数据的一致性,但是 --lock-tables 只能保证某一备份数据库的完整性,不能保证整个实例备份的完整性
mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events 数据库 > 备份文件.sql
# 下载 libev软件包
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm# 安装 libev软件包
yum install percona-xtrabackup-24
# 全量备份
innobackupex --user=管理员账号 --password=密码 --parallel=2 备份路径innobackupex --user=backup --password=Gzjunyu19970925. --parallel=2 /home/db_backup/# 全量恢复,建议恢复前停止mysql服务,且清空mysql数据文件
innobackupex --datadir=mysql数据路径 --copy-back 备份路径innobackupex --datadir=/var/lib/mysql --copy-back /home/db_backup/2018-04-21_10-44-22/# 修改mysql数据路径的权限为777
chmod -R 777/var/lib/mysql


🎈  mysql 的分区分表

  • 查看是否支持分区分表:show plugins;
  • 删除分区命令:ALTER TABLE 表名 DROP PARTITION 分表名称;
  • 分区分类:范围分区哈希分区时间分区
# 范围分区
CREATETABLE `表名`(-- 数据字段)engine=INNODB
PARTITION BY RANGE(`字段名称`)(    PARTITION 分表名称 VALUES LESS THAN(范围),    PARTITION 分表名称 VALUES LESS THAN(范围));# 哈希分区
createtable `表名`(-- 数据字段)engine=INNODB
PARTITION BY HASH(UNIX TIMESTAMP(`字段名称`)) PATITIONS 4;# 时间分区
createtable `表名`(-- 数据字段)engine=INNODB
PARTITION BY RANGE(YEAR(`字段名称`))(    PARTITION p0 VALUES LESS THAN(2017),    PARTITION p1 VALUES LESS THAN(2018),    PARTITION p2 VALUES LESS THAN(2019));# 查看分区情况
SELECT    table_name,partition_name,partition_description,table_rows
FROM    information_schema.`PARTITIONS`
WHERE table_name ='表名';# 归档分区数据,mysql数据库版本需要大于等于5.7-- 分区归档操作步骤-- 1.新建和分区表字段一致的数据表 归档表前缀为 arch_CREATETABLE `归档表表名`()engine=INNODB
-- 2.进行数据交换 p0为分区名ALTERTABLE `原数据表表名` exchange PARTITION p0 WITH TABLE `归档表表名`;-- 3.删除分区,避免对数据的再次写入ALTERTABLE `原数据表表名` DROP PARTITION p0;-- 4.将归档表引擎设置为 archive  在检表语句中mysql引擎必须和原数据表引擎一致,否则无法进行数据交换ALTERTABLE `归档表表名` ENGINE=ARCHIVE;


🎈  mysql 的主从复制读写分离

  • 授权远程访问 mysql 数据库
  • 新建相关数据库管理员,授权并开启远程访问权限
-- 建议新建一个备份和主从复制的数据库管理员CREATE USER 'backup'@'localhost' IDENTIFIED BY'密码';-- 分配相关权限grant select,reload,lock tables,replication client,show view,event,process on*.* to 'backup'@'localhost';-- 开启远程访问权限GRANT ALL PRIVILEGES ON*.* TO 授权用户名@被授权服务器的IP IDENTIFIED BY'授权密码';FLUSH PRIVILEGES;
  • 配置mysql主服务器
  • 需要在 master 服务器和 slave 服务器都建立一个同名的数据(备份数据库)
  • 在主服务器中开启 binlog 日志和设置要发生主从同步数据库,使用 vim 打开 /etc/my.cnf 文件,修改配置如下
  • 配置完毕后,需要重启服务:service mysqld restart;
#mysql的bin-log日志配置选项,假设做读写(主从),这个选项在从服务器必须关闭
log_bin = binlog
#端口信息,其实可以不写
port =3306#主服务器的id,这id不一定设为1,只要主从不一样就行
server-id =1#要做同步的数据库名字,可以是多个数据库,之间用分号分割。
binlog_do_db = test
  • 检查配置
  • 登录 mysql 查看 binlog 日志相关参数是否正确
show master status;show variables like'log_bin';
  • 配置mysql从服务器
  • 主服务器已经配置成功,这时要切换到从服务器开始配置
  • 在从服务器中开启 binlog 日志和设置要发生主从同步数据库,使用 vim 打开 /etc/my.cnf 文件,修改配置如下
#从服务器的id,必须与主服务器的id是不同
server-id =2#主服务器的ip地址
master-host =192.168.56.2#grant授权的可复制用户账号
master-user = backup
#grant授权的可复制密码
master-password =123456#主服务器的mysql端口
master-port =3306#这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒
master-connect-retry =20#需要同步的主服务器数据库
replicate-do-db = test
  • 检测主从复制配置是否成功
show slave status\G
-- 如果结果包含如下参数,则证明主从已经配置成功Slave_IO_Running: Yes
Slave_SQL_Running: Yes
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
3月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
590 5
|
6月前
|
关系型数据库 MySQL 索引
mysql中的索引和分区
在MySQL中,索引和分区是提高查询效率的关键技术。通过创建合适的索引,可以显著提升数据检索速度。而分区可以作为作为进一步提高查询效率的方式,在较大数据量时通常可以使用这两个结合的方式优化查询速度,所以这边将这两个进行整理,巩固个人知识,同时也希望帮助到有需要的朋友。
161 2
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
426 1
|
11月前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
1274 44
如何实现 MySQL 的读写分离?
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
578 0
|
11月前
|
SQL 网络协议 关系型数据库
MySQL 主从复制
主从复制是 MySQL 实现数据冗余和高可用性的关键技术。主库通过 binlog 记录操作,从库异步获取并回放这些日志,确保数据一致性。搭建主从复制需满足:多个数据库实例、主库开启 binlog、不同 server_id、创建复制用户、从库恢复主库数据、配置复制信息并开启复制线程。通过 `change master to` 和 `start slave` 命令启动复制,使用 `show slave status` 检查同步状态。常见问题包括 IO 和 SQL 线程故障,可通过重置和重新配置解决。延时原因涉及主库写入延迟、DUMP 线程性能及从库 SQL 线程串行执行等,需优化配置或启用并行处理
285 40
|
11月前
|
关系型数据库 MySQL 数据库
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
随着数据量增长和业务扩展,单个数据库难以满足需求,需调整为集群模式以实现负载均衡和读写分离。MySQL主从复制是常见的高可用架构,通过binlog日志同步数据,确保主从数据一致性。本文详细介绍MySQL主从复制原理及配置步骤,包括一主二从集群的搭建过程,帮助读者实现稳定可靠的数据库高可用架构。
668 9
RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?
|
11月前
|
SQL 存储 关系型数据库
MySQL主从复制 —— 作用、原理、数据一致性,异步复制、半同步复制、组复制
MySQL主从复制 作用、原理—主库线程、I/O线程、SQL线程;主从同步要求,主从延迟原因及解决方案;数据一致性,异步复制、半同步复制、组复制
1321 11
|
关系型数据库 MySQL 数据库
docker高级篇(大厂进阶):安装mysql主从复制
docker高级篇(大厂进阶):安装mysql主从复制
317 24
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
365 14

推荐镜像

更多