MySQL on linux

歷史
1994瑞典,從商業(AB公司)到開源,並於2008年被SUN花10億美金收購

……………………………………………………………….

安裝部份

方法1
yum安裝
yum install mysql
yum install mysql-server

方法2
rpm安裝
相關資料
glibc 2.0.7-19 此寒式庫之前的版本對安裝mysql有不良影響
perl-dbi*.rpm 安裝mysql-server*.rpm時可能會須要
mysql-server*.rpm 主伺服器,安裝順序1 (大部份安裝在/usr/bin/*,/usr/share/*)
mysql-client*.rpm 客戶端連線程式,安裝順序2 (安裝在/usr/bin/*,/usr/share/man/*)
mysql-devel*.rpm 寒式庫和標頭檔,安裝順序3 (大部份安裝在/usr/include/mysql/*,/usr/lib/mysql/*)
mysql-shared*.rpm 動態客戶端寒式庫,安裝順序4 (安裝在/usr/lib/*)
mysql-test*.rpm 效能測試套件,可省略的套件

啟動mysql
mysql.server [start|stop] //啟動關閉mysqld

設定root密碼
/usr/bin/mysqladmin -u root password ‘newpwd’ //設定mysql裡帳號root的新密碼為newpwd

登入mysql
mysql -u root -p //用root身份進入mysql
ps:
mysql db -u root -p //用root身份進入mysql,並自動執行use db
mysql db -u root -p < file.sql //以root身份,將file.sql匯入到資料庫db

… 

安裝後狀態

檔案配置(依版本可能各有不同)
/etc/my.cnf MySQL設定檔
/usr/bin  客戶端程式
/usr/sbin  mysqld伺服器
/var/lib/mysql  紀錄檔與資料庫檔案,備份mysql時需連同此目錄
/usr/share/doc/packages  文件

ps:
在資料庫檔案內資料檔
 資料表名.frm :資料表定義檔
 資料表名.myd :資料檔
 資料表名.myi :索引檔

ps:
mysql資料表格式
 myisam 速度快,預設使用,無法容錯因此需要常備份
 heap 留在記憶體的表格,速度最快
 innodb 具有交易特性,速度慢

web管理軟體
phpmyadmin安裝步驟如下
1
download
ex:http://www.phpmyadmin.net/home_page/downloads.php
2 [optional]
#tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz
#mv phpMyAdmin_x.x.x-all-languages /var/www/html/phpmyadmin
#cd /var/www/html/phpmyadmin
3
#cp config.sample.inc.php config.inc.php
4
#vi config.inc.php
$cfg[‘blowfish_secret’] = ‘ba17c1ec07d65003’; // use here a value of your choice
$cfg[‘Servers’][$i][‘auth_type’] = ‘http’;
ps:
$cfg[‘Servers’][$i][‘auth_type’] string [‘HTTP’|’http’|’cookie’|’config’|’signon’]
‘HTTP’ authentication (was called ‘advanced’ in previous versions and can be written also as ‘http’) ($auth_type = ‘HTTP’) as introduced in 1.3.0 allows you to log in as any valid MySQL user via HTTP-Auth.
5
open browser
http:// server ip /phpmyadmin/
login vaild mysql user


參考文章
http://www.phpmyadmin.net/documentation/

……………………………………………………………………………………

……………………………………………………………………………………

管理mysql常用功能

設定user密碼
mysql> set password for user@localhost=password(‘userpassword’);

移除遠端存取
1 mysql> use mysql
2 mysql> delete from user where host=’%’

新增任何地方都可連上mysql的root帳號 
INSERT INTO `user` (`Host`, `User`)values(‘%’, ‘root’);

移除無使用者
1 mysql> use mysql
2 mysql> delete from user where user=”

給帳號user所有權限 
mysql> GRANT ALL ON *.* TO user@localhost IDENTIFIED BY ‘userpasswd’;

立即更新
mysql> flush privileges

清除mysql log
有時因log檔太大,可將mysql-bin.0000001…等log清除
mysql> reset master
Query OK, 0 rows affected (3.56 sec)
ps:
若要求mysq不產log,可在my.cnf內設為以下
#log-bin=mysql-bin

另一方法為
PURGE BINARY LOGS 
ps:http://dev.mysql.com/doc/refman/5.0/en/purge-binary-logs.html
ex:
刪除mysql-bin.010這個log檔
PURGE BINARY LOGS TO ‘mysql-bin.010’;
ex:
刪除2012-01-01 12:00:00之前的log
PURGE BINARY LOGS BEFORE ‘2012-01-01 12:00:00’;


直接登入mysql且不使用密碼
當忘記密碼,或出現Access denied for user ‘root’@’localhost’ (using password: NO)的狀況時
做法:
先停止mysql,並執行以下
# mysqld_safe –user=mysql –skip-grant-tables –skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD(‘newpassword’) where USER=’root’;
mysql> FLUSH PRIVILEGES;
mysql> quit
重新啟動mysql

…………………………………………………………………………………..

…………………………………………………………………………………..

資料備份部份


匯出資料常用有以下兩種

使用dump
ex:
mysqldump -u test -h 192.168.0.100 -p testdb > alltable.sql
mysqldump -u test -h 192.168.0.100 -p testdb testtable > alltesttable.sql
mysqldump -u test -h 192.168.0.100 -d -p testdb testtable > schematesttable.sql
mysqldump -u test -h 192.168.0.100 -d -p testdb testtable1 testtable2 > schemasometable.sql
參數說明
>: 表示匯出資料
<: 表示匯入資料
-u: mysql使用者
-h: 連線host IP或Domain Name
-d: 只需要匯出(dump)Table的結構, 若沒有此參數, 會將Table的結構和資料一併匯出
-p: 需要密碼, 指令執行後待會會要求輸入
testdb: 指定要處理的DB名稱
testtable: 指定要處理的Table名稱
testtable.sql: 匯入或是匯出Table資料的SQL語法

使用outfile
ex:
select * from data into outfile ‘/tmp/test.csv’ FIELDS TERMINATED BY ‘,’

……………………………..

匯入資料常用有以下三種

使用mysqlimport
tablename必須和來源文字檔一樣,也就是在匯入之前須先建好
格式
mysqlimport -u root [other parameter] -p < dbname> < tablename>.txt
常用parameter
 –fields-terminated-by=分隔欄位的字元
 –fields-enclosed-by=欄位邊界的字元
 –local 設定為本地
 –ignore-lines=N ,Ignore the first N lines of the data file.
ex:
mysqlimport -u root –local –fields-terminated-by=, -p kdd99 kddcupdata10.txt
refer 
https://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html


使用 重導向
ex:
mysql -u test -p testdb < testtable.sql


使用 load data 
格式
LOAD DATA INFILE ‘< filepath >’ INTO TABLE < tablename> [ paramanter]
常用parameter
 FIELDS TERMINATED BY 以那個字元做分隔
 FIELDS ENCLOSED BY 以那個字元做欄位的前後邊界
 IGNORE 1 LINES 忽略第1行
ex:
LOAD DATA INFILE ‘/root/test.csv’ INTO TABLE ibtable FIELDS TERMINATED BY ‘,’
LOAD DATA INFILE ‘/tmp/test.txt’ INTO TABLE test IGNORE 1 LINES
ps:
LOAD DATA INFILE不行可用LOAD DATA LOCAL INFILE代替
refer 
https://dev.mysql.com/doc/refman/5.0/en/load-data.html

ps:
load data參數結構如下
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE ‘file_name’
 [REPLACE | IGNORE]
 INTO TABLE tbl_name
 [CHARACTER SET charset_name]
 [{FIELDS | COLUMNS}
  [TERMINATED BY ‘string’]
  [[OPTIONALLY] ENCLOSED BY ‘char’]
  [ESCAPED BY ‘char’]
 ]
 [LINES
  [STARTING BY ‘string’]
  [TERMINATED BY ‘string’]
 ]
 [IGNORE number LINES]
 [(col_name_or_user_var,…)]
 [SET col_name = expr,…]

…………………………………………………………………………….

…………………………………………………………………………….

其他部份 

更改MySQL資料庫目錄
假設MySQL資料庫目錄在linux下預設為/var/lib/mysql,若要改到/data,如下所示:

stop mysql service

mysqladmin -u root -p shutdown

move /var/lib/mysql to /data

mv /var/lib/mysql /data/

edit /etc/my.cnf
 
vi  my.cnf   
# The MySQL server
[mysqld]
port   = 3306
#socket  = /var/lib/mysql/mysql.sock
socket  = /data/mysql/mysql.sock //指定mysql.sock的產生位置 
4 
edit MySQL start script 

vi /etc/rc.d/init.d/mysqld
#datadir=/var/lib/mysql   
datadir=/data/mysql   //指定實際存放的路徑 

restart mysql service 

/etc/rc.d/init.d/mysqld start
若運作正常則移動成功 
ps
若有使用phpmyadmin,需修改conf.inc.php中的socket路徑,並重新啟動網頁伺服器
vi /etc/conf.inc.php
$cfg[‘Servers’][$i][‘socket’] = ‘/data/mysql/mysql.sock’;
ps
若有發生找不到mysql的socket之類相關訊息,可直接將舊的mysql.sock導引到新的路徑,如下
ln -s /network/mysql/mysql.sock /var/lib/mysql/mysql.sock