安装 MySQL
注:以 Ubuntu 12.04 LTS 为例
安装 MySQL 服务器:
~$ sudo apt-get install mysql-server 
 只安装 MySQL 客户端: 
~$ sudo apt-get install mysql-client修改 root 密码
$ mysqladmin -u root -p password <new_passwd>
Enter password:<old_passwd>启动或关闭 MySQL
$ sudo service mysqld start|stop
$ sudo /etc/rc.d/init.d/mysqld start|stop查看 MySQL 版本
2.2 Determining Your Current MySQL Version
登陆时会有版本信息显示
$ mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 50
Server version: 5.5.37-0ubuntu0.12.04.1 (Ubuntu) 
mysql> SHOW VARIABLES LIKE "%version%"; 
mysql> STATUS; 
 注意: 
mysql --version(-V) 这种方法是错误的,因为这是查看 mysql 这个程序的版本,而非 MySQL server(mysqld) 的版本。
查看所有用户
mysql> SELECT User,Host,Password FROM user;
+------------------+----------------------+-------------------------------------------+
| User             | Host                 | Password                                  |
+------------------+----------------------+-------------------------------------------+
| root             | localhost            | *15943532B0D808E5C8710C3C76D9FB509BC41666 |
| root             | controller.openstack | *15943532B0D808E5C8710C3C76D9FB509BC41666 |
| root             | 127.0.0.1            | *15943532B0D808E5C8710C3C76D9FB509BC41666 |
| root             | ::1                  | *15943532B0D808E5C8710C3C76D9FB509BC41666 |
| debian-sys-maint | localhost            | *48EAED3CA6FCD5B1672404BBC7FEC70C8F911856 |
| keystone         | %                    | *AD5CC56971C9CD6CB2822CEE3608405EF7A791E6 |
| keystone         | localhost            | *AD5CC56971C9CD6CB2822CEE3608405EF7A791E6 |
+------------------+----------------------+-------------------------------------------+
7 rows in set (0.00 sec) 
连接 MySQL server
--host=host_name, -h host_name
--port=port_num, -P port_num
--user=user_name, -u user_name
--database=db_name, -D db_name
--password[=password], -p[password] 
MySQL server 所在服务器:controller.openstack 192.168.0.11
另一装有 mysql 客户端的主机:compute.openstack 192.168.0.12
能匹配到 mysql.user 中记录的 '<user>'@'<host>' 组合才能成功连接
例一:本地登陆
~$ mysql -u root -h 192.168.0.11 -p        
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'192.168.0.11' (using password: YES)'root'@'192.168.0.11' 不存在,所以连接失败 
例二:远程登陆,在 192.168.0.12 中登陆
~$ mysql -u keystone -h controller.openstack -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
......这种方式连接时, MySQL server 识别的组合是 'keystone'@'compute.openstack', 它匹配 'keystone'@'%' 组合 
解决:以允许 root 远程和用 ip 本地登陆为例
mysql> GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '<password_for_root>'; 这里涉及到 MySQL 的权限管理,了解更多,参见  
6.2 The MySQL Access Privilege System
phpMyAdmin 修改数据库登录用户名和密码
phpMyAdmin 安装目录下的 config.inc.php:
$cfg['Servers'][$i]['user'] = '<db_user>';
$cfg['Servers'][$i]['password'] = '<passwd>'; 
创建用户、授权、删除用户、回收权限
首先要理解 MySQL “用户”的概念,用户并非单纯的 mysql.user 里的 User 列,完整的用户概念应该是 '<user>'@'<host>'.
创建用户、删除用户:
CREATE USER 'test'@'%' IDENTIFIED BY 'testpw';
DROP USER 'test'@'%'; 
 授权: 
GRANT ALL ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'hwx@keystone';如果 keystone 用户不存在,这条语句会创建用户。 
回收权限:
回收权限最好不要用 REVOKE, 因为它不会删除相关表中的记录(如 mysql.user, mysql,db),用 DELETE 有不能保证清理干净,所以用 DROP USER:
DROP USER 'keystone'@'localhost'; 更多参见: 
13.7.1. Account Management Statements
6.2 The MySQL Access Privilege System
导出整个库结构
 
mysqldump --no-data <db> [table1 table2 ...] -h <host> -u <user> -p >/tmp/dump.sql
sed -i 's/CREATE TABLE/CREATE TABLE IF NOT EXISTS/g' /tmp/dump.sql 
--no-data: 只导出结构,不导出数据
 
 
--databases: 同时指定多个 db, 而且会生成 "CREATE DATABASE" 和 "USE" 语句
 
 
 
执行整个 sql 文件
 
mysql -h <host> -u <user> -p </tmp/dump.sql 
 
查看建表建库语句
 
SHOW CREATE DATABASE `<db>`\G
SHOW CREATE TABLE `<db>`\G 
 
 
查看表使用的存储引擎
 
SHOW TABLE STATUS FROM <db> where Name=<table>;其中 "Engine" 字段就是存储引擎,需要注意的是通过 "SHOW CREATE TABLE" 查到的可能会不准确( 
查看mysql当前表使用的存储引擎)。
 
 
将某值为时间戳的字段转换为可读格式
FROM_UNIXTIME(field)
查看 MySQL 服务器当前默认字符集和指定数据库的字符集
 
查看 MySQL 服务器当前默认字符集:
 
mysql> SHOW VARIABLES LIKE 'character_set_server';
mysql> SHOW VARIABLES LIKE 'collation_server'; 
 
 查看指定数据库的字符集: 
 
mysql> use somedb
mysql> SHOW VARIABLES LIKE 'character_set_database';
mysql> SHOW VARIABLES LIKE 'collation_database'; 
 
 
使用事务
 
mysql_query("START TRANSACTION");   // mysql_query("BEGIN");
$res1 = mysql_query("<SQL1>");
$res2 = mysql_query("<SQL2>");
if($res1 && $res2)
{
    mysql_query("COMMIT");
}
else
{
    mysql_query("ROLLBACK");
} 
 
 
 
