上云连载4:数据库备份与恢复

前沿技术

  编程派微信号:codingpy

  本文是「上云连载」第四篇,在开始部署 Flask 应用环境之前,我们先把原先服务器上的数据库备份导出,并在腾讯云 CVM 上完成数据库恢复工作。

  由于我在开发「编程派」网站时使用的是 PostgreSQL,因此本文所说的数据库备份和恢复操作,均是针对 PostgreSQL 而言的。如果你使用的是其他类型数据库,请参考相关的文档。

  数据库备份

  PostgreSQL 号称是世界上最先进的开源数据库。从我对国外 Python 社区有限的了解来看,国外 Python 开发者对该数据库非常推崇,PyCon US 上经常请这方面的专家来普及数据库使用知识。我记得当初选择 PostgreSQL 也是因为听了某个演讲说 Python 和 PostgreSQL 二者如何契合。

  有关 PostgreSQL 的具体介绍,请见官方文档。我们接下来通过 SSH 登陆到旧服务器,然后在用户根目录下使用 pg_dump 命令备份数据库:

  pg_dump -C -Fp -f dump.sql -U postgres some_database_name

  有关 pg_dump 命令的详情,请看文档。我这里对上述命令做个简单解释。

  pg_dump 是一个用于备份数据库的工具命令,即使当前数据库存在连接的情况下也没有问题,不会阻塞其他用户访问。不过这个命令一次只能备份一个数据库,如果想备份所有数据库共有的全局对象,则需要使用 pg_dumpall 命令。

  在这里,pg_dump 命令生成的是一个名为 dump.sql 的脚本文件。

  -C 选项表示在输出的脚本中,一开始会是创建并重连到数据库的命令。

  -F 选项指定输出的格式,后面跟着的 p 表示输出纯文本 SQL 脚本文件,也是默认选项。

  -f 表示将输出发送至指定的文件。

  -U 表示以什么用户名连接到要备份的数据库

  接下来,我们通过 scp 命令将服务器上的 dump.sql 文件保存至本地:

  scp username@old-server:dump.sql /path/to/save/dump.sql

  数据库恢复

  数据库的恢复也非常简单,同样只需要执行一个命令即可。但是在此之前,我们先安装并配置好 PostgeSQL 。

  scp dump.sql development:(scp username@remote:/file/to/s /where/to/put)

  安装及配置

  在 Debian 系统下,请使用如下命令安装 PostgreSQL:

  sudo apt-get install postgresql-9.4

  安装完成后,默认会新建一个名为 postgres 的系统用户,用于管理 PostgreSQL 数据库。我们不打算直接用该账号,而是创建一个自己常用的。这里,我按如下操作创建一个名为 earlgrey 的 psotgresql 账号。

  sudo su - postgres

  createuser --interactive

  根据提示输入用户名,并选择合适的账户类型。我创建的是一个和 postgres 同级别的账号。然后创建一个和新账号同名的数据库:

  createdb earlgrey

  这样,即使在登陆为 earlgrey 账户时,也可以使用 psql 命令进行 PostgreSQL 命令行。

  进入命令行后,根据需要修改该账号的密码。

  ALTER USER "earlgrey" WITH PASSWORD new_password;

  数据库恢复

  数据库的安装和配置基本完成了,接下来我们把本文第一步中备份好的 dump.sql 文件上传至 CVM 上。

  scp /path/to/dump.sql qcloud:/path/to/dump.sql

  注意,这里我使用的是第二篇中配置好的服务器别名,具体请参考这里。

  最后,执行下面这条命令:

  psql -U earlgrey -f dump.sql

  -U 和 -f 选项的功能应该是不言自明的,具体请参考官方文档。执行该命令后,你应该会在终端看到一系列输出,实际上是 psql 在执行 dump.sql 文件中的一系列命令,即创建数据库并写入数据。

  确认恢复

  为了确认数据库恢复成功,我们以 earlgrey 账户连接到新创建的数据库 codingpy。

  \c codingpy

  然后执行 SQL 查询语句:

  SELECT id, title FROM articles WHERE title LIKE Python%;

  结语

  本文中,我们完成了对编程派网站文章数据的备份和恢复。在将要部署的 Flask 应用中,我们可以通过该 URI 访问并连接到恢复后的数据库:

  postgresql://earlgrey:new_password@localhost/codingpy

标签: 前沿技术