简略描述 MySQL 的备份及还原,详细讲解需看另一篇文章。
【2024.8.18整理】
备份
mysqldump备份
- 可实现 热备份、全量备份、备份全库或者指定库。
- 生成逻辑sql语句,备份文件体积小,可读性好。
- 备份及还原性能相对差。
普通备份
# mysqldump 是普通shell命令,不登录到MySQL内。win系统需要在cmd下执行。
# 可以通过是命令行执行 mysqldump --help 查看具体操作# 备份命令格式
mysqldump [选项] 数据库名 [表名] > ***.sql
mysqldump [选项] --databases 数据库名 [选项 表名] > ***.sql
mysqldump [选项] --all-databases [选项] > ***.sql# 常用的几个选项:
-h 或 --host 指定数据库的地址,本机可以省略。
-P 数据库的端口号
-B 或 --databases 用于备份指定数据库。后面可以跟多个值:如果后面跟的都是数据库名,则备份所有指定数据库。如果第一个是数据库名,后面是表名,则备份该数据库的指定表。
-A 或 --all-databases 用于备份全部数据库(包含mysql的几个基础库)
--single-transaction 会开启事务,不锁表,并且保证数据的一致性
--ignore-views 备份时忽略视图
--tables 数据表1 [数据表2] 备份指定的一个或多个表
--ignore-table=数据表1 忽略指定的一个表,如果需要忽略多个表,则需要多个 --ignore-table 参数
-d 或 --no-data 不导出数据(仅导出表结构)# 备份指定数据库的全部表(一个或多个)
mysqldump -u用户名 -p密码 --databases 数据库名1 [数据库名2] > ***.sql# 备份指定数据库的全部表(一个或多个)(需要备份远程数据库的)
mysqldump -h ip.x.x.x -P 端口号 -u用户名 -p密码 --databases 数据库名1 [数据库名2] > ***.sql# 备份全部数据库的全部表
mysqldump -u用户名 -p密码 --all-databases > ***.sql# 备份指定一个数据库的指定表(一个或多个)
mysqldump -u用户名 -p密码 --databases 数据库名 --tables 数据表1 [数据表2] > ***.sql# !!不能备份多个数据库的指定表。
# !!也不能在指定数据表时使用表名的模糊匹配(但是可以通过shell的方式实现备份模糊表名)
Docker备份
- 在Docker内备份的方法与普通安装时的备份方法一致,只不过是套了一层Docker。
- 为了方便备份,可以将docker内mysql的备份存放地址,直接挂载到宿主机的一个目录。
# 宿主机内执行如下语句来备份指定数据库:
docker exec {容器名} sh -c 'exec mysqldump -u{mysql账号} -p{mysql密码} --databases {待备份数据库}' > /var/backups/mysql_bak_`date +%F`.sql
# 例:
docker exec 1Panel-mysql-wm6N sh -c 'exec mysqldump -uroot -pmysql_E2meaG --databases wiki_snipm7' > /var/backups/mysql_bak_`date +%F`.sql
还原
普通还原
# 在shell下使用mysql命令进行备份还原
mysql -u{mysql账号} -p{mysql密码} < path/to/bak.sql
# 例:
mysql -uroot -pmysql_E2meaG < /var/mysql_bak_2024-08-17.sql
Docker还原
- docker还原需要先将宿主机的备份文件复制到容器内。
- 如果备份文件在容器内,或者宿主机的备份文件所在目录挂载到了容器内,可以忽略该步骤。
- 然后再在容器内执行
mysql
命令来进行备份还原。