因學習需求,我近期開始在 Linux 系統上部署與使用 MySQL。本以為憑藉 Windows 下 SQL Server 的經驗,Linux 上安裝 MySQL 會輕而易舉,實際操作才發現兩者差異極大,走了不少彎路。為了幫助同樣的初學者少走彎路、快速入門,特整理此文,希望能提供實質幫助。
安裝 MySQL 需要以下兩個 RPM 包(以 4.0.16 版本為例):
下載地址:MySQL 官方下載頁。在「Linux x86 RPM downloads」區塊中分別下載 Server 與 Client programs。
RPM 是 Red Hat 開發的軟體安裝包格式,能簡化安裝流程。常用參數 -ivh 中:i 表安裝、v 顯示詳細資訊、h 以 # 號顯示進度。
[root@test1 local]# rpm -ivh MySQL-server-4.0.16-0.i386.rpm
warning: MySQL-server-4.0.16-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
Preparing... ########################################### [100%]
1:MySQL-server ########################################### [100%]
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h test1 password 'new-password'
Starting mysqld daemon with databases from /var/lib/mysql
出現上述訊息即代表服務端安裝完成。可用 netstat -nat 檢查 3306 端口是否監聽(MySQL 預設端口):
[root@test1 local]# netstat -nat
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
[root@test1 local]# rpm -ivh MySQL-client-4.0.16-0.i386.rpm
warning: MySQL-client-4.0.16-0.i386.rpm: V3 DSA signature: NOKEY, key ID 5072e1f5
Preparing... ########################################### [100%]
1:MySQL-client ########################################### [100%]
登入指令為 mysql,語法如下:
mysql [-u username] [-h host] [-p[password]] [dbname]
root,初始無密碼(非 Linux 系統帳號)。mysql 即可。mysql -u root -p,按提示輸入密碼。注意:mysql 執行檔位於 /usr/bin,與啟動腳本 /etc/init.d/mysql 非同一檔案。
MySQL 安裝後檔案分散於不同目錄,掌握這些路徑對深入學習至關重要:
| 用途 | 路徑 |
|---|---|
| 資料庫檔案 | /var/lib/mysql/ |
| 配置檔案 | /usr/share/mysql/ (含 mysql.server 及配置檔) |
| 相關命令 | /usr/bin/ (mysqladmin, mysqldump 等) |
| 啟動腳本 | /etc/rc.d/init.d/ (mysql 啟動腳本) |
/usr/bin/mysqladmin -u root password 'new-password'
# 格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
[root@test1 local]# /usr/bin/mysqladmin -u root password 123456
# 初始無密碼,故 -p 舊密碼可省略
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)mysql> 提示符。# 啟動
/etc/init.d/mysql start
# 停止
/usr/bin/mysqladmin -u root -p shutdown
# 查看是否已在自啟清單
/sbin/chkconfig --list
# 加入自啟服務
/sbin/chkconfig --add mysql
# 移除自啟服務
/sbin/chkconfig --del mysql
預設資料目錄為 /var/lib/mysql,若需遷移至 /home/data,步驟如下:
mkdir /home/datamysqladmin -u root -p shutdownmv /var/lib/mysql /home/data/cp /usr/share/mysql/my-medium.cnf /etc/my.cnf/etc/my.cnf,修改 socket 路徑:socket = /home/data/mysql/mysql.sock/etc/rc.d/init.d/mysql,修改 datadir:datadir=/home/data/mysql/etc/rc.d/init.d/mysql start注意:每條指令須以分號 ; 結尾。
mysql> show databases;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
mysql> use mysql;
mysql> show tables;
describe 表名;
select * from 表名;
create database 資料庫名;
use 資料庫名;
create table 表名 (欄位定義列表);
# 範例
create table name (
id int(3) auto_increment not null primary key,
xm char(8),
xb char(2),
csny date
);
# 新增
insert into name values('','張三','男','1971-10-01');
# 修改
update name set csny='1971-01-10' where xm='張三';
# 刪除
delete from name where xm='張三';
drop database 資料庫名;
drop table 表名;
語法:grant 權限 on 資料庫.* to 用戶名@登入主機 identified by "密碼"
grant select,insert,update,delete on *.* to user_1@"%" identified by "123";
此帳號可從任意主機連線,擁有全庫增刪改查權限,風險極高。
grant select,insert,update,delete on aaa.* to user_2@localhost identified by "123";
僅允許本機連線操作 aaa 庫,大幅降低風險。
mysql -u user_1 -p -h 192.168.113.50
cd /home/data/mysql
mysqldump -u root -p --opt aaa > back_aaa
mysql -u root -p ccc < back_aaa
mysqldump -u 用戶名 -p 資料庫名 > 檔案名mysqldump -u 用戶名 -p 資料庫名 表名 > 檔案名mysqldump -u 用戶名 -p -d --add-drop-table 資料庫名 > 檔案名mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt 資料庫名 > 檔案名source 檔案路徑