分类 国产化 下的文章

thinkphp下mysql迁移至瀚高(postgreSQL)数据库

国产化需要将thinkphp系统由mysql迁移至瀚高数据库。

基本流程:

  1. 备份log相关表;清理log无用日志;
  2. 停用系统;
  3. 导出最新的sql文件(log等大表可考虑单独导出);
  4. 导入本地mysql数据库(如不支持远程连接);
  5. 处理相关代码与数据表(如处理user、desc、year、group字段等;处理group by、order by field、find_in_set、ifnull、convert、date_format方法等);
  6. 创建远程hg数据库
  7. 使用迁移工具迁移

- 阅读剩余部分 -

postgres删除指定数据库报错有其他session正在连接的解决办法

瀚高等基于postgres的数据库在删除数据库时常见报错信息:

dropdb -h localhost -p 5432 -U postgres sensen

dropdb: error: database removal failed: ERROR: database "sensen" is being accessed by other users
DETAIL: There is 1 other session using the database.

解决方法:
切换到psql下,执行:SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='你的数据库名字' AND pid<>pg_backend_pid();
退出psql再次删除即可。

pgsql使用pgdump免密码备份

通过crontab执行shell脚本对数据库进行pgdump备份时,需要手动敲入密码的,解决方案:

1、通过配置 pg_hba.conf 文件实现
增加一行:host all all 192.168.1.1/32 trust(注:瀚高数据库不支持此方法)
192.168.1.1替换成自己备份服务器的ip即可。完成这个配置需要重启pgsql服务,这样192.168.1.1上发起的数据库连接就无需再输入密码。修改配置文件需要重启数据库服务。

连接类型

local 这条记录匹配通过 Unix 域套接字进行的联接企图, 没有这种类型的记录,就不允许 Unix 域套接字的联接。
host 这条记录匹配通过TCP/IP网络进行的联接尝试。他既匹配通过ssl方式的连接,也匹配通过非ssl方式的连接。 注意:要使用该选项你要在postgresql.conf文件里设置listen_address选项,不在listen_address里的IP地址是无法匹配到的。因为默认的行为是只在localhost上监听本地连接。
hostssl 这条记录匹配通过在TCP/IP上进行的SSL联接企图。 要使用该选项,服务器编译时必须使用–with-openssl选项,并且在服务器启动时ssl设置是打开的,具体内容可见这里。
hostnossl 这个和上面的hostssl相反,只匹配通过在TCP/IP上进行的非SSL联接企图。

允许访问的数据库

指定这一记录匹配的数据库名。值all指定它匹配所有数据库。可以提供多个数据库名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有数据库名的单独的文件。
用户名
指定这一记录匹配的数据库角色名。值all指定它匹配所有角色。如果指定的角色是一个组并且希望该组中的所有成员都被包括在内,在该角色名前面放一个+。可以提供多个角色名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有角色名的单独的文件。

主机IP

指定这一记录匹配的客户端机器的IP地址范围。它包含一个标准点分十进制表示的IP地址和一个CIDR掩码长度。IP地址只能用数字指定,不能写成域或者主机名。掩码长度指示客户端IP地址必须匹配的高位位数。给定IP地址中,在这些位的右边必须是零。IP地址、/和CIDR掩码长度之间不能有任何空格。
典型的CIDR地址例子是:192.0.2.89/32是一个单一主机,192.0.2.0/24是一个小网络,10.6.0.0/16是一个大网络。要指定一个单一主机,对IPv4使用一个CIDR掩码32,对IPv6使用128。在一个网络地址中,不要省略拖尾的零。

ip地址(ip-address)、子网掩码(ip-mask) 这两个字段包含可以看成是标准点分十进制表示的 IP地址/掩码值的一个替代。
例如,使用255.255.255.0 代表一个24位的子网掩码。它们俩放在一起,声明了这条记录匹配的客户机的 IP
地址或者一个IP地址范围。本选项只能在连接方式是host,hostssl或者hostnossl的时候指定。

认证方法

trust 无条件地允许联接,这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期望的任意 PostgreSQL 数据库用户身份进行联接,而不需要口令。

reject 联接无条件拒绝,常用于从一个组中"过滤"某些主机。

md5 要求客户端提供一个 MD5 加密的口令进行认证,这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法。

sm4 国密算法支持(国产数据库如瀚高)

password 和"md5"一样,但是口令是以明文形式在网络上传递的,我们不应该在不安全的网络上使用这个方式。

2、配置~/.papass
~/ 目录下创建 .pgpass 文件,按照 host:port:dbname:username:password 格式输入对应信息。可以多行配置多个数据库连接信息,再执行:chmod 0600 .pgpass 更改文件权限。
(前提是该备份服务器ip已经按照1中的配置文件配置了允许访问数据库,认证方式为md5、sm4或者password)