30.3. 备份和恢复数据库
使用 oc rsync
将现有数据库容器的数据库存档复制到新数据库容器的持久性卷目录中。
注意
MySQL 在以下示例中使用。将 mysql|MYSQL
替换为 pgsql|PGSQL
或 mongodb|MONGODB
,并参阅 迁移指南 以查找每个支持的数据库镜像的确切命令。该示例假定现有的数据库容器。
从正在运行的数据库 pod 备份现有数据库:
$ oc rsh <existing db container> # mkdir /var/lib/mysql/data/db_archive_dir # mysqldump --skip-lock-tables -h ${MYSQL_SERVICE_HOST} -P ${MYSQL_SERVICE_PORT:-3306} \ -u ${MYSQL_USER} --password="$MYSQL_PASSWORD" --all-databases > /var/lib/mysql/data/db_archive_dir/all.sql # exit
远程将存档文件同步到您的本地机器:
$ oc rsync <existing db container with db archive>:/var/lib/mysql/data/db_archive_dir /tmp/.
启动第二个 MySQL pod,以便将上面创建的数据库存档文件加载到其中。MySQL pod 必须具有唯一的
DATABASE_SERVICE_NAME
。$ oc new-app mysql-persistent \ -p MYSQL_USER=<archived mysql username> \ -p MYSQL_PASSWORD=<archived mysql password> \ -p MYSQL_DATABASE=<archived database name> \ -p DATABASE_SERVICE_NAME='mysql2' 1 $ oc rsync /tmp/db_archive_dir new_dbpod1234:/var/lib/mysql/data $ oc rsh new_dbpod1234
- 1
MySQL
是默认值。在本例中,已创建mysql2
。
使用适当的命令从复制的数据库存档目录中恢复新数据库容器中的数据库:
MySQL
$ cd /var/lib/mysql/data/db_archive_dir $ mysql -u root $ source all.sql $ GRANT ALL PRIVILEGES ON <dbname>.* TO '<your username>'@'localhost'; FLUSH PRIVILEGES; $ cd ../; rm -rf /var/lib/mysql/data/db_backup_dir
现在,您已使用存档数据库在项目中运行的两个 MySQL 数据库 pod。