记录一次postgresql迁移经历

数据库服务器硬盘满了,需要将数据迁移到另一台数据库,做一下记录

安装

去postgresql官网https://www.postgresql.org/download/,选择操作系统,我这里选择的是ubuntu。
然后根据说明进行安装

1
2
3
4
5
6
7
8
9
10
11
12
# Create the file repository configuration:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

# Update the package lists:
sudo apt-get update

# Install the latest version of PostgreSQL.
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt-get -y install postgresql

值得注意的是,安装时一定要选择与老数据库相同的版本

安装完成后,就可以会自动添加一个postgres的系统用户,该用户没有密码如果想要密码可以自行设置

登录postgresql,配置密码

刚安装完,一定要使用postgres用户才可以登录

1
2
3
4
5
6
7
$ sudo su - postgres
$ psql
psql (9.6.19)
SSL 连接(协议:TLSv1.2,密码:ECDHE-RSA-AES256-GCM-SHA384,密钥位:256,压缩:关闭)
输入 "help" 来获取帮助信息.

postgres=#

出现postgres=#标示已经登录到数据库了。非常简单。

psql命令其实是相当于psql -U postgres -h localhost,因为psql如果不指定用户会使用与系统账户相同的数据库账号。
一定要注意哦,系统中的postgres和数据库的postgres虽然名字一样,但不是一回事一个属于系统,一个数据数据库。
接下来给数据库的postgres账号设置密码,这样我们就可以在不切换系统postgres账号的情况下登录了。

1
postgres=# alter user postgres with password '123456'

这样就设置好了密码。

配置外网访问

默认postgresql是不允许外网访问的,我们需要修改两个文件。

  1. pg_hba.conf:配置数据库的访问权限
  2. postgresql.conf:配置数据库服务的相关参数

首先我们退出数据库

1
postgres=# \q

然后切换回root账号

1
su - root

接下来修改配置文件,修改pg_hba.conf,增加一条host all all 0.0.0.0/0 md5规则

修改postgresql.conf 找到#listen_addresses=’localhost’,修改成listen_addresses=’*’

修改完成重启服务

1
service postgres restart

这样我们就可以在其他电脑上用psql -h serverip -U postgres登录数据库管理了

修改数据存储位置

  1. 首先需要停止服务执行service postgresql stop

  2. 将原来的数据库目录复制新目录
    打开postgresql.conf文件找到data_directory看一下当前数据库存放目录

    将目录复制到想保持的地方,不可以使用cp那样会缺少属性,无法启动数据库,需要用rsync命令

    1
    rsync -av /var/lib/postgresql/9.6/main /mnt/main

/var/lib/postgresql/9.6/maindata_directory中个默认的设置,将其修改为新目录/mnt/main
3. 重启服务service postgresql

这样数据存储位置就生效了

导入老数据

执行命令psql -h localhost -U postgres 数据库名 < 备份文件 导入数据