mysql平常命令三

十一Mysql索引操做(建立、刪除)

建立索引 html

在執行CREATE TABLE語句時能夠建立索引,也能夠單獨用CREATE INDEXALTER TABLE來爲表增長索引。 mysql

ALTER TABLE用來建立普通索引、UNIQUE索引或PRIMARY KEY索引。 sql

Mysql > ALTER TABLE table_name ADD INDEX 索引名列名; 數據庫

Mysql > ALTER TABLE table_name ADD UNIQUE (column_list) 緩存

Mysql > ALTER TABLE table_name ADD PRIMARY KEY (column_list) ide

例:hospital表中增長hid字段爲索引,索引名字爲hid;  ui

Mysql > alter table hospital add index hid(hid); spa

查看索引 日誌

Mysql> show index from hospital; htm

刪除索引

Mysql > ALTER TABLE table_name DROP INDEX index_name

例:刪除hospital表中hid索引 

Mysql > alter table hospital drop index hid;

遇到的問題

當字段類型是BLOBTEXT,添加索引報以下錯

 

ERROR 1170 (42000): BLOB/TEXT column 'body' used in key specification without a key length

 

十三Mysql查看用戶權限

Mysql > use mysql;

Mysql > show grants for rootclub@219.232.241.74;

 

Grants for root club@219.232.241.74                                                                                            

|

+-------------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON *.* TO 'rootclub'@'219.232.241.74' IDENTIFIED BY PASSWORD '*CA2E50EF9258EF8601C1AF1BF539510916747A3A' | 

| GRANT ALL PRIVILEGES ON `club`.* TO 'rootclub'@'219.232.241.74' WITH GRANT OPTION    


 

grant SUPER,REPLICATION CLIENT on *.* to houzc@localhost identified by 'qwe123!'

十四修復Mysql

1、當mysql表被損壞,提示以下錯誤

 

|mysqldump: Got error: 145: Table './cms_sichuan/dede_archives' is marked as crashed and should be repaired when using LOCK TABLES 


 

 

 

修復方法

/usr/local/mysql/bin/myisamchk -c -r /usr/local/var/cms_sichuan/dede_archives.MYI

輸出

 

- recovering (with sort) MyISAM-table '/usr/local/var/cms_sichuan/dede_archives.MYI'

Data records: 2702

- Fixing index 1

- Fixing index 2

- Fixing index 3

- Fixing index 4

- Fixing index 5

- Fixing index 6

 

2、沒有中止mysql就重啓系統,mysql報錯

 

100419 10:19:56 [ERROR] /usr/local/mysql/libexec/mysqld: Table './cms_xyxy/dede_full_search' is marked as crashed and last (automatic?) repair failed

修復方法

/usr/local/mysql/bin/mysql -uroot -p

> use cms_xyxy

> repair table dede_full_search

3、修復全部表

中止mysql服務

# /usr/local/mysql/bin/myisamchk -r /data/mysqldata/club/*.MYI

 

多數狀況下,數據庫被破壞只是指索引文件受到了破壞,真正的數據被破壞掉的狀況很是少。大多數形式的數據庫破壞的的修復至關簡單。
和前面的校驗同樣,修復的方式也有三種。
下面講的方法只對MyISAM格式的表有效。其餘類型的損壞須要從備份中恢復。
1,REPAIR TABLE SQL statement(mysql服務必須處於運行狀態)。
2,命令mysqlcheck(mysql服務能夠處於運行狀態)。
3,命令myisamchk(必須停掉mysql服務,或者所操做的表處於不活動狀態)。
在修復表的時候,最好先做一下備份。因此你須要兩倍於原始表大小的硬盤空間。請確保在進行修復前你的硬盤空間尚未用完。
1>用」repair table」方式修復
語法:repair table 表名 [選項]
選項以下:
QUICK 用在數據表還沒被修改的狀況下,速度最快
EXTENDED 試圖去恢復每一個數據行,會產生一些垃圾數據行,萬般無奈的狀況下用
USE_FRM 用在.MYI文件丟失或者頭部受到破壞的狀況下。利用.frm的定義來重建索引
多數狀況下,簡單得用」repair table tablename」不加選項就能夠搞定問題。可是當.MYI文件丟失或者頭部受到破壞時,這樣的方式無論用,例如:
mysql> REPAIR TABLE mytable;
+————————-+——–+———-+———————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+———————————————+
| sports_results.mytable | repair | error | Cant find file: ‘mytable.MYI’ (errno: 2) |
+————————-+——–+———-+———————————————+
修復失敗的緣由時索引文件丟失或者其頭部遭到了破壞,爲了利用相關定義文件來修復,須要用USE_FRM選項。例如:
mysql> REPAIR TABLE mytable USE_FRM;
+————————-+——–+———-+————————————+
| Table | Op | Msg_type | Msg_text |
+————————-+——–+———-+————————————+
| sports_results.mytable | repair | warning | Number of rows changed from 0 to 2 |
| sports_results.mytable | repair | status | OK |
+————————-+——–+———-+————————————+
咱們能夠看到Msg_test表項的輸出信息」ok」,表名已經成功修復受損表。
2>用mysql內建命令mysqlcheck來修復
mysql服務在運行時,也能夠用mysql內建命令mysqlcheck來修復。
語法:mysqlcheck -r 數據庫名 表名 -uuser -ppass
%mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK
利用mysqlcheck能夠一次性修復多個表。只要在數據庫名後列出相應表名便可(用空格隔開)。或者數據庫名後不加表名,將會修復數據庫中的全部表,例如:
%mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK

%mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK
3>用myisamchk修復
用這種方式時,mysql服務必須停掉,或者所操做的表處於不活動狀態(選項skip-external-locking沒被使用)。記着必定要在相關.MYI文件的路徑下或者本身定義其路徑。
語法:myisamchk [選項] [表名]
下面是其選項和描述
–backup, -B 在進行修復前做相關表得備份
–correct-checksum 糾正校驗和
–data-file-length=#, -D # 重建表時,指定數據文件得最大長度
–extend-check, -e 試圖去恢復每一個數據行,會產生一些垃圾數據行,萬般無奈的狀況下用
–force, -f 當遇到文件名相同的.TMD文件時,將其覆蓋掉。
keys-used=#, -k # 指定所用的keys可加快處理速度,每一個二進制位表明一個key.第一個key爲0
–recover, -r 最經常使用的選項,大多數破壞均可以經過它來修復。若是你的內存足夠大,能夠增大參數sort_buffer_size的值來加快恢復的速度。可是遇到惟一鍵因爲破壞而不惟一 的表時,這種方式無論用。
–safe-recover -o 最完全的修復方式,可是比-r方式慢,通常在-r修復失敗後才使用。這種方式讀出 全部的行,並以行爲基礎來重建索引。它的硬盤空間需求比-r方式稍微小一點,因 爲它沒建立分類緩存。你能夠增長key_buffer_size的值來加快修復的速度。
–sort-recover, -n mysql用它類分類索引,儘管結果是臨時文件會很是大
–character-sets-dir=… 包含字符集設置的目錄
–set-character-set=name 爲索引定義一個新的字符集
–tmpdir=path, -t 若是你不想用環境變量TMPDIR的值的話,能夠自定義臨時文件的存放位置
–quick, -q 最快的修復方式,當數據文件沒有被修改時用,當存在多鍵時,第二個-q將會修改 數據文件
–unpack, -u 解開被myisampack打包的文件
myisamchk應用的一個例子
% myisamchk -r mytable
- recovering (with keycache) MyISAM-table ‘mytable.MYI
Data records: 0

十五Mysql導出二進制日誌

/usr/local/mysql/bin/mysqlbinlog mysql-bin.000026 > test26.sql

/usr/local/mysql/bin/mysqlbinlog mysql-bin.000028 --start-position 1010663046 > test28.sql

// --start-position 選擇起始節點

十6、平常用到Mysql語句

Mysql >  delete from user_common_new where pid in (select pid from tmppp) and age is null;

//刪除user_common_new表中的pidtmppp表中的pid相等 且 年齡爲空的信息

Mysql出現的錯誤解決:

平常Mysql錯誤解決

出現1040 錯誤

max_connections=1000 修改鏈接數

mysql error 1201-1300錯誤大全

:http://blog.sina.com.cn/s/blog_6b92dc3b0100nhw2.html

 

解決方法:

因爲BLOBTEXT類型的數據列只能索引前500個前綴,則添加時註明長度

Mysql > alter table news add index body_index(body (499))

十二Mysql修改數據存儲位置

通常mysql安裝完,默認的數據存儲路徑在/usr/local/mysql/data中,能夠把數據存儲到其餘路徑,步驟以下

# mkdir /data/mysqldata

# chown root:root /data

# chown -R mysql:mysql /data/mysqldata

若是已經有數據了,將/usr/local/mysql/data下的文件拷貝到新位置

# cp -r /usr/local/mysql/data/* /data/mysqldata

# chown -R mysql:mysql /data/mysqldata

修改mysql配置

# vi /etc/my.cnf

 

[mysql]

datadir = /data/mysqldata

innodb_data_home_dir = /data/mysqldata

innodb_data_file_path = ibdata1:10M:autoextend

innodb_log_group_home_dir = /data/mysqldata

 
相關文章
相關標籤/搜索