编程派微信号: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