前言
以下以mysql:5.7.31为例,mysql8.0版本增强了密码功能,如果不熟悉这块内容,会引发了很多问题,包括这次研究使用mysqldump数据迁移,也有坑,这里就不细说了,现在看来,如果对于mysql8.0版本的新特性没研究,也没必要使用的,自己学习测试还是直接使用5.x版本。
docker run --name mysql5.7 -e MYSQL_ROOT_PASSWORD=root -d -p3306:3306 mysql:5.7.31
mysql is a simple SQL shell with input line editing capabilities. It supports interactive and noninteractive use.
众所周知,mysqldump是官方提供的数据迁移工具,它集成在mysql-client中,所以要使用这个工具,先在本地安装mysql-client。现在是容器,云原生时代,本地docker部署,线上k8s部署mysql是必然。要做备份,你需要解决两个问题,第一,如何连接到数据库;第二,如何获取备份后的文件。在物理机下本不是问题的问题,在容器环境下却变得非常复杂。
docker与k8s环境下,数据迁移复杂度来源是网络模型与存储卷。
docker网络有linux network namespace,bridge模式,host模式等知识点,docker是直接挂载宿主机作为持久存储,还可以知道数据存在硬盘什么位置。k8s环境下,docker只是作为一种容器运行时,不关心docker容器运行在那台机器上,k8s有跨主机通信,三层网络模型等,k8s的存储类直接屏蔽了存储细节。
下面逐层分析物理机,docker,k8s环境下的数据备份迁移方式。
mysqldump用法
直接参阅官方文档,以下是参考官方文档稍微做几点说明:
调用语法:
shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
--opt参数
Shorthand for --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
-h -u 是host, user 缩写
--disable-keys:surround INSERT statements