Unix Toolbox

 主页   资讯   文章   代码   电子书 

PostgreSQL

更改 root 用户或其它用户的密码

# psql -d template1 -U pgsql
> alter user pgsql with password 'pgsql_password';  # pgsql 为需要更改密码的用户名

创建用户和数据库

命令 createuser, dropuser, createdbdropdb 等同于 SQL 命令译注:其实是一个 Shell 脚本 的快捷方式。我们创建一个新用户叫 bob 和一个数据库叫 bobdb;使用数据库的超级用户 pgsql 来创建:

# createuser -U pgsql -P bob         # -P 会请求一个秘密
# createdb -U pgsql -O bob bobdb     # 新数据库 bobdn 的所有者是 bob译注:通常,执行这个命令的数据库用户成为新数据库的所有者。不过,如果执行用户拥有合适的权限,那么他可以通过 -O 指定合适的用户。
# dropdb bobdb                       # 删除数据库 bobdb
# dropuser bob                       # 删除用户 bob

一般数据库认证机制配置在 pg_hba.conf 文件中。

允许远程访问

文件 $PGSQL_DATA_D/postgresql.conf 可指定绑定地址。对于 Postgres 8.x 通常为 listen_addresses = '*'
文件 $PGSQL_DATA_D/pg_hba.conf 定义了访问控制。举例:

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK          METHOD
host    bobdb       bob        212.117.81.42     255.255.255.255   password
host    all         all        0.0.0.0/0                           password

备份和恢复

使用 pgsql 或 postgres 用户来完成备份与恢复。下面是备份和恢复单个数据库:

# pg_dump --clean dbname > dbname_sql.dump
# psql dbname < dbname_sql.dump

备份和恢复所有数据库(包括用户):

# pg_dumpall --clean > full.dump
# psql -f full.dump postgres

在这个例子中,你可以声明任意现有的数据库进行连接,但是如果你是向一个空的数据库集群装载,那么 postgres 应该是比较好的选择。

MySQL

更改 mysql root 用户或其它用户的密码

方法 1

# /etc/init.d/mysql stop
or
# killall mysqld
# mysqld --skip-grant-tables
# mysqladmin -u root password 'newpasswd'
# /etc/init.d/mysql start

方法 2

# mysql -u root mysql
mysql> UPDATE USER SET PASSWORD=PASSWORD("newpassword") where user='root';
mysql> FLUSH PRIVILEGES;                           # 使用用户名替代"root"
mysql> quit

创建用户和数据库

# mysql -u root mysql
mysql> CREATE DATABASE bobdb;
mysql> GRANT ALL ON *.* TO 'bob'@'%' IDENTIFIED BY 'pwd';
                           # 使用 localhost 替代 % 来限制网络访问
mysql> DROP DATABASE bobdb;                        # 删除数据库 bobdb
mysql> DROP USER bob;                              # 删除用户 bob
mysql> DELETE FROM mysql.user WHERE user='bob and host='hostname';
                           # 删除 mysql 数据库 user 表中 user=bob,host=hostname 的记录
mysql> FLUSH PRIVILEGES;

允许远程访问

远程访问通常允许单个数据库,而不是所有的数据库。文件 /etc/my.cnf 包含约定的 IP 地址。通常为 bind-address = 绑定地址。

# mysql -u root mysql
mysql> GRANT ALL ON bobdb.* TO bob@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'PASSWORD';
mysql> REVOKE GRANT OPTION ON foo.* FROM bar@'xxx.xxx.xxx.xxx';
mysql> FLUSH PRIVILEGES;                  # 使用 'hostname' 也可为 '%' 来完全访问

备份和恢复

备份和恢复单个数据库:

# mysqldump -u root -psecret --add-drop-database dbname > dbname_sql.dump
# mysql -u root -psecret -D dbname < dbname_sql.dump

备份和恢复所有的数据库:

# mysqldump -u root -psecret --add-drop-database --all-databases > full.dump
# mysql -u root -psecret < full.dump

这里 mysql root 的密码为 "secret",-p 选项后面没有空格。当单独使用 -p 选项(不跟密码),命令行提示符后会要求输入密码。

SQLite

SQLitehttp://www.sqlite.org 是一个小而强大的、独立的(self-contained)、无服务器的(serverless)、零配置的(zero-configuration) SQL 数据库。

备份和恢复

实用备份和恢复 SQLite 数据库命令。举个例子,你可以编辑备份文件来修改字段的属性和类型,然后再恢复这个数据库。这比使用 SQL 命令来得容易。对于 3.x 数据库可使用 sqlite3

# sqlite database.db .dump > dump.sql              # 备份
# sqlite database.db < dump.sql                    # 恢复

转换 2.x 到 3.x 数据库

sqlite database_v2.db .dump | sqlite3 database_v3.db