docker控制postgers容器导入导出数据
文章目录1、从容器中备份数据库2、将sql导入到postgres1、从容器中备份数据库有了这些经历,我决定把postgres中的数据备份起来,免得下次在出现这种情况,我可以直接删库跑路,哈哈哈,扯远了,可以删掉容器,重建,导入数据,不需要那么麻烦去容器中追查木马,搞出来一堆问题。docker ps进入目标容器:docker exec -u root -it 容器名 /bin/bashdocker
·
文章目录
1、从容器中备份数据库
有了这些经历,我决定把postgres中的数据备份起来,免得下次在出现这种情况,我可以直接删库跑路,哈哈哈,扯远了,可以删掉容器,重建,导入数据,不需要那么麻烦去容器中追查木马,搞出来一堆问题。
1、docker exec 进入目标容器:
先docker ps 查看下运行的容器列表
进入目标容器:
docker exec -u root -it 容器名 /bin/bash
2、pg_dump 开始备份
docker 中,以root用户,创建备份目录,直接执行如下命令,
pg_dump -h localhost -p 5432 -U odoo xxx(数据库名) > /数据库dump备份文件目录/export_XXX(数据库名)_bak_2018xxx.dmp
看实际操作如下:
root@f82e7d3a9755:/# pg_dump -h localhost -p 5432 -U dbasuper lszz > /usr/export_lszz_backups.dmp
Password:
root@f82e7d3a9755:/# ls /usr
bin export_lszz_backups.dmp games include lib local sbin share src
root@f82e7d3a9755:/#
【备份指定表】
很多时候,我们可能更希望不是备份整个数据库而是某些表;
1.1 导出单表数据
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 –inserts > bak.sql
1.2 导出多个表数据
pg_dump -h 127.0.0.1 -U admin -p 5432 -W db -t t1 -t t2 –inserts > bak.sql
实际操作
pg_dump -h localhost -p 5432 -U postgres app -t cnb_dzz -t cnb_gsp > /usr/tmp_20220518.dmp
pg_dump常用参数
-h host,指定数据库主机名,或者IP
-p port,指定端口号
-U user,指定连接使用的用户名
-W,按提示输入密码
dbname,指定连接的数据库名称,实际上也是要备份的数据库名称。
-a,–data-only,只导出数据,不导出表结构
-c,–clean,是否生成清理该数据库对象的语句,比如drop table
-C,–create,是否输出一条创建数据库语句
-f file,–file=file,输出到指定文件中
-n schema,–schema=schema,只转存匹配schema的模式内容
-N schema,–exclude-schema=schema,不转存匹配schema的模式内容
-O,–no-owner,不设置导出对象的所有权
-s,–schema-only,只导致对象定义模式,不导出数据
-t table,–table=table,只转存匹配到的表,视图,序列,可以使用多个-t匹配多个表
-T table,–exclude-table=table,不转存匹配到的表。
–inserts,使用insert命令形式导出数据,这种方式比默认的copy方式慢很多,但是可用于将数据导入到非PostgreSQL数据库。
–column-inserts,导出的数据,有显式列名
3、将文件从容器中拷贝到宿主机
现在备份了但是在容器里需要将其拷贝到宿主机来
拷贝文件从容器里
1、从容器里面拷文件到宿主机?
答:在宿主机里面执行以下命令
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?
答案:在宿主机上面执行命令
1
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
2、从宿主机拷文件到容器里面
答:在宿主机里面执行如下命令
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?
答案:在宿主机上面执行如下命令
1
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
实际操作
[root@dex leshan]# docker cp postgresql:/usr/export_lszz_backups.dmp /opt
2、将sql导入到postgres
1、将sql 文件拷贝到容器中usr目录下
[root@dex ~]# docker cp /opt/app.sql postgresql:/usr
2、然后再是要进入容器
[root@dex ~]# docker exec -u root -it '容器名称' /bin/bash
3、查看导入的sql,已经在usr目录下了
root@f8255:/# ls /usr
app.sql bin
4、登录postgres
root@f8255:/# su postgres
5、 创建数据
postgres@f8255:/$ psql
postgres=# CREATE DATABASE app;
postgres=# \q
6、执行导入
postgres@f8255:/$ psql -U postgres app < /usr/app.sql
【注意】如果是导入已存在的表数据,那需要先删除对应已存在的表,再进行导入,不然会提示异常
删除表数据及结构
drop table tableName;
只删除表数据
delete from tableName;
7、查询导入结果
7.1、链接psql
postgres@f8255:/$ psql
7.2、看看数据库
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
------------------+----------+----------+---------+---------+-----------------------
app | postgres | UTF8 | C.UTF-8 | C.UTF-8 |
7.3、切换数据库
postgres=# \c app
You are now connected to database "app" as user "postgres".
7.4、查看该数据库对应的表
app=# \dt
List of relations
Schema | Name | Type | Owner
----------+---------------------------+-------+----------
public | DM_dingqu | table | postgres
ok 数据库导入到此已经成功完成了
更多推荐
已为社区贡献2条内容
所有评论(0)