安裝選custmer自定義安裝。預設安裝全部在c盤。自定義安裝的時候有個advance port選項用來選擇安裝目錄。 MySQL常見的一些操作命令 #切換當前目錄到d盤下D: #切換到指定的目錄下cd D:\Program Files (x86)\MySQL\MySQL Server 5.6\bi ...
安裝選custmer自定義安裝。預設安裝全部在c盤。
自定義安裝的時候有個advance port選項用來選擇安裝目錄。
-----------------------MySQL常見的一些操作命令--------------------------------
#切換當前目錄到d盤下
D:
#切換到指定的目錄下
cd D:\Program Files (x86)\MySQL\MySQL Server 5.6\bin
#以root身份登錄到MySQL資料庫,要控制命令在MySQL服務目錄下,在
mysql -u root -p -- 回車後會要求輸入密碼。
#顯示MySQL資料庫包含的所有的資料庫。
show databases;
#查看指定部分的資料庫
show databases like “%sch%”;
/*
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
clear (\c) Clear the current input statement.
connect (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
ego (\G) Send command to mysql server, display result vertically.
exit (\q) Exit mysql. Same as quit.
go (\g) Send command to mysql server.
help (\h) Display this help.
notee (\t) Don't write into outfile.
print (\p) Print current command.
prompt (\R) Change your mysql prompt.
quit (\q) Quit mysql.
rehash (\#) Rebuild completion hash.
source (\.) Execute an SQL script file. Takes a file name as an argument.
status (\s) Get status information from the server.
tee (\T) Set outfile [to_outfile]. Append everything into given outfile.
use (\u) Use another database. Takes database name as argument.
charset (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
*/
#清屏。
cls --需退出mysql登錄才行。屬dos命令。不是MySQL內部命令。
#密碼修改:
#密碼修改一,修改完成後要重啟才能生效。在cmd視窗中執行。而不是mysql中。
mysqladmin -uroot -p password hqhq --特別註意password關鍵字後面要有一個空格,然後再跟新的密碼。新密碼無需用''括起來,也不要加;,否則這些也會是密碼的一部分。
#密碼修改二,修改完成後要重啟才能生效。前提用管理員許可權賬號已經登錄了mysql。
update mysql.user set password=password('hqhq') where user='root'; --特別註意password中''括起來的是新密碼。
-------------------------------------------------庫操作--------------------------------------------------------------
#查看mysql預設的字元集編碼格式
show variables like '%char%';
+--------------------------+---------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+---------------------------------------------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | D:\Program Files (x86)\MySQL\MySQL Server 5.6\share\charsets\ |
+--------------------------+---------------------------------------------------------------+
/*設置字元集格式
以下操作只是臨時的,也就是對當前的會話有效,如果以後不想再修改,就加上關鍵字 global
比如 set global character_set_client=utf8;
執行命令:
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
set character_set_filesystem=utf8;
*/
------------ 建庫
create database hq;
--查看資料庫所支持的校對集:
show collation;
--查看資料庫的創建 sql 語句
show create database hq;
更新資料庫
***資料庫的名稱是不可更改的選項。 如果要更新資料庫名,一般做法是新建新庫,然後
複製庫的表和數據(後面再講怎麼操作)。
更新資料庫字元集
alter databse c3gen charset GBK;
查看 資料庫字元集
show variables like 'character_set_%';
-- -- 刪除資料庫
drop database hq;
--指定資料庫使用
use hq;
--------------------------------資料庫表操作-----------------------------------------------
--建表,建表之前需指定資料庫
create table if not exists student(
-> student_id int primary key,
-> student_name varchar(25),
-> stu_age int(2),
-> stu_score int(2));
-------------------------------------------------------------
create table test(
-> id int,
-> name varchar(30))
-> charset utf8;
/*帶上字元集是個好習慣。後面的例子我基本上都會帶上。
If not exists: 如果表名不存在,那麼就創建,否則不執行創建代碼: 檢查功能。
創建之前記得指定資料庫,不然會報錯。No database selected;
當然也可以這樣創建 資料庫名.表名。*/
--建表之前不指定資料庫,建表語句中指定資料庫
create table if not exists hq.student(
-> id int,
-> name varchar(30))
-> charset utf8;
--查看當前資料庫下所有表
show tables;
--查看創建當前表的 sql 語句
show create table student;
CREATE TABLE `student` (
`student_id` int(11) NOT NULL,
`student_name` varchar(25) DEFAULT NULL,
`stu_age` int(2) DEFAULT NULL,
`stu_score` int(2) DEFAULT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
查看表結構
show columns from 表名;
desc/describe 表名。
--更新表名
rename table 表名 to 新表名;
表的字元集 alter table 表名 charset = 字元集;
更新表欄位 可以靈活的使用 after,first 等關鍵字。
更新欄位 modify 修改欄位屬性(數據類型等) change 修改欄位名
--修改列的類型
alter table hqhq
-> modify name int;
-------改名---------------
alter table hqhq
-> change name age int;
------------列之後----------------
alter table hqhq
-> add column name varchar(30) after age;
--------首列---------
alter table hqhq
-> add column idcard varchar(30) first;
-------------刪除欄位 drop 欄位名; ***在資料庫中的所有刪除 drop 操作均不可逆。
alter table hqhq
-> drop name;
--刪除表比較簡單,
drop table 表名……. 可以指定多張表。***在資料庫中的所有刪除
操作均不可逆。
-- ----------------------------------------------------------------
怎樣從文本文件執行SQL語句
mysql客戶程式一般交互使用:
shell> mysql db_name
還可以將SQL語句放到一個文件中然後告訴mysql從該文件讀取輸入。要想實現,創建一個文本文
件text_file,並包含你想要執行的語句。然後按如下所示調用mysql:
shell> mysql db_name< text_file
還可以用一個USE db_name語句啟動文本文件。在這種情況下,不需要在命令行中指定資料庫名:
shell> mysql < text_file
如果正運行mysql,可以使用source或\.命令執行SQL腳本文件:
mysql> source filename
mysql> \. filename
有時想要使用腳本來向用戶顯示進度信息;為此可以插入下述行:
SELECT '<info_to_display>' AS ' ';
將輸出<info_to_display>。
-- ------------------------------在批處理模式下使用mysql--------------------------------------
為了做到這些,把你想要運行的命令放在一個文件中,然後告訴mysql從文件讀取它的輸入:
shell> mysql < batch-file
如果在Windows下運行mysql,並且文件中有一些可以造成問題的特殊字元,可以這樣操作:
C:\> mysql -e "source batch-file"
如果你需要在命令行上指定連接參數,命令應為:
shell> mysql -h host-u user-p < batch-file
Enter password: ********
當這樣操作mysql時,則創建一個腳本文件,然後執行腳本。
如果你想在語句出現錯誤的時候仍想繼續執行腳本,則應使用--force命令行選項。
為什麼要使用一個腳本?有很多原因:
● 如果你需要重覆運行查詢(比如說,每天或每周),可以把它編成一個腳本,則每次執行時
不必重新鍵入。
● 可以通過拷貝並編輯腳本文件從類似的現有的查詢生成一個新查詢。
● 當你正在開發查詢時,批模式也是很有用的,特別對多行命令或多語句命令序列。如果你
犯了一個錯誤,你不必重新輸入所有內容,只需要編輯腳本來改正錯誤,然後告訴mysql再
次執行腳本。
● 如果你有一個產生多個輸出的查詢,你可以通過一個分頁器而不是盯著它翻屏到屏幕的頂
端來運行輸出:
• shell> mysql < batch-file | more
● 你可以捕捉文件中的輸出以便進行進一步的處理:
• shell> mysql < batch-file > mysql.out
● 你可以將腳本分發給另外的人,以便他們也能運行命令。
● 某些情況不允許交互地使用,例如, 當你從一個cron任務中運行查詢時。在這種情況下,你
必須使用批模式。
當你以批模式運行mysql時,比起你交互地使用它時,其預設輸出格式是不同的(更簡明些)。例
如,當互動式運行SELECT DISTINCT species FROM pet時,輸出應為:
+---------+
| species |
+---------+
| bird |
| cat |
| dog |
| hamster |
| snake |
+---------+
但是當以批模式運行時,輸出應為:
species
bird
cat
dog
hamster
snake
如果你想要在批模式中得到交互輸出格式,使用mysql -t。為了回顯以輸出被執行的命令,使用
mysql -vvv。
你還可以使用源代碼或 \.命令從mysql提示符運行腳本:
mysql> source filename;
mysql> \. filename
資料庫備份
-- 刪除資料庫
drop database 資料庫名(資料庫中有橫線時需用反引號引起來。``.否則會報錯)
--導出 在cmd下而不是mysql下
mysqldum -u BtsServer -p 資料庫名 > e:/textOut.sql -- 末尾不要加分號
shell> mysqldump [options] db_name [tbl_name ...] 恢復需要手動CRATE DATABASES
shell> mysqldump [options] --databases db_name ... 恢復不需要手動創建資料庫
shell> mysqldump [options] --all-databases 恢復不需要手動創建資料庫
其他選項:
-E, --events: 備份事件調度器
-R, --routines: 備份存儲過程和存儲函數
--triggers: 備份表的觸發器; --skip-triggers
--master-date[=value]
1: 記錄為CHANGE MASTER TO 語句、語句不被註釋
2: 記錄為註釋的CHANGE MASTER TO語句
基於二進位還原只能全庫還原
--flush-logs: 日誌滾動
鎖定表完成後執行日誌滾動
語法:
預設不帶參數的導出,導出文本內容大概如下:創建資料庫判斷語句-刪除表-創建表-鎖表-禁用索引-插入數據-啟用索引-解鎖表。
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
插入測試數據
複製代碼
CREATE DATABASE db1 DEFAULT CHARSET utf8;
USE db1;
CREATE TABLE a1(id int);
insert into a1() values(1),(2);
CREATE TABLE a2(id int);
insert into a2() values(2);
CREATE TABLE a3(id int);
insert into a3() values(3);
CREATE DATABASE db2 DEFAULT CHARSET utf8;
USE db2;
CREATE TABLE b1(id int);
insert into b1() values(1);
CREATE TABLE b2(id int);
insert into b2() values(2);
複製代碼
1.導出所有資料庫
該命令會導出包括系統資料庫在內的所有資料庫
mysqldump -uroot -proot --all-databases >/tmp/all.sql
2.導出db1、db2兩個資料庫的所有數據
mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql
3.導出db1中的a1、a2表
註意導出指定表只能針對一個資料庫進行導出,且導出的內容中和導出資料庫也不一樣,導出指定表的導出文本中沒有創建資料庫的判斷語句,只有刪除表-創建表-導入數據
mysqldump -uroot -proot --databases db1 --tables a1 a2 >/tmp/db1.sql
4.條件導出,導出db1表a1中id=1的數據
如果多個表的條件相同可以一次性導出多個表
欄位是整形
mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1' >/tmp/a1.sql
欄位是字元串,並且導出的sql中不包含drop table,create table
mysqldump -uroot -proot --no-create-info --databases db1 --tables a1 --where="id='a'" >/tmp/a1.sql
5.生成新的binlog文件,-F
有時候會希望導出數據之後生成一個新的binlog文件,只需要加上-F參數即可
mysqldump -uroot -proot --databases db1 -F >/tmp/db1.sql
6.只導出表結構不導出數據,--no-data
mysqldump -uroot -proot --no-data --databases db1 >/tmp/db1.sql
7.跨伺服器導出導入數據
mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2
將h1伺服器中的db1資料庫的所有數據導入到h2中的db2資料庫中,db2的資料庫必須存在否則會報錯
mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test
加上-C參數可以啟用壓縮傳遞。
8.將主庫的binlog位置和文件名追加到導出數據的文件中,--dump-slave
註意:--dump-slave命令如果當前伺服器是從伺服器那麼使用該命令會執行stop slave來獲取master binlog的文件和位置,等備份完後會自動執行start slave啟動從伺服器。但是如果是大的數據量備份會給從和主的延時變的更大,使用--dump-slave獲取到的只是當前的從伺服器的數據執行到的主的binglog的位置是(relay_mater_log_file,exec_master_log_pos),而不是主伺服器當前的binlog執行的位置,主要是取決於主從的數據延時。
該參數在在從伺服器上執行,相當於執行show slave status。當設置為1時,將會以CHANGE MASTER命令輸出到數據文件;設置為2時,會在change前加上註釋。
該選項將會打開--lock-all-tables,除非--single-transaction被指定。
在執行完後會自動關閉--lock-tables選項。--dump-slave預設是1
mysqldump -uroot -proot --dump-slave=1 --databases db1 >/tmp/db1.sql
mysqldump -uroot -proot --dump-slave=2 --database db1 >/tmp/db1.sql
9.將當前伺服器的binlog的位置和文件名追加到輸出文件,--master-data
該參數和--dump-slave方法一樣,只是它是記錄的是當前伺服器的binlog,相當於執行show master status,狀態(file,position)的值。
註意:--master-data不會停止當前伺服器的主從服務
10.--opt
等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項預設開啟, 可以用--skip-opt禁用.
mysqldump -uroot -p --host=localhost --all-databases --opt
11.保證導出的一致性狀態--single-transaction
該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程式且能保證導出時資料庫的一致性狀態。它只適用於多版本存儲引擎(它不顯示加鎖通過判斷版本來對比數據),僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
--quick, -q
不緩衝查詢,直接導出到標準輸出。預設為打開狀態,使用--skip-quick取消該選項。
12.--lock-tables, -l
開始導出前,鎖定所有表。用READ LOCAL鎖定表以允許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,因為它根本不需要鎖定表。
請註意當導出多個資料庫時,--lock-tables分別為每個資料庫鎖定表。因此,該選項不能保證導出文件中的表在資料庫之間的邏輯一致性。不同資料庫表的導出狀態可以完全不同。
13.導出存儲過程和自定義函數--routines, -R
mysqldump -uroot -p --host=localhost --all-databases --routines
14.壓縮備份
壓縮備份
mysqldump -uroot -proot --databases abc 2>/dev/null |gzip >/abc.sql.gz
還原
gunzip -c abc.sql.gz |mysql -uroot -proot abc
參數說明:
複製代碼
--all-databases , -A
導出全部資料庫。
mysqldump -uroot -p --all-databases
--all-tablespaces , -Y
導出全部表空間。
mysqldump -uroot -p --all-databases --all-tablespaces
--no-tablespaces , -y
不導出任何表空間信息。
mysqldump -uroot -p --all-databases --no-tablespaces
--add-drop-database
每個資料庫創建之前添加drop資料庫語句。
mysqldump -uroot -p --all-databases --add-drop-database
--add-drop-table
每個數據表創建之前添加drop數據表語句。(預設為打開狀態,使用--skip-add-drop-table取消選項)
mysqldump -uroot -p --all-databases (預設添加drop語句)
mysqldump -uroot -p --all-databases –skip-add-drop-table (取消drop語句)
--add-locks
在每個表導出之前增加LOCK TABLES並且之後UNLOCK TABLE。(預設為打開狀態,使用--skip-add-locks取消選項)
mysqldump -uroot -p --all-databases (預設添加LOCK語句)
mysqldump -uroot -p --all-databases –skip-add-locks (取消LOCK語句)
--allow-keywords
允許創建是關鍵詞的列名字。這由表名首碼於每個列名做到。
mysqldump -uroot -p --all-databases --allow-keywords
--apply-slave-statements
在'CHANGE MASTER'前添加'STOP SLAVE',並且在導出的最後添加'START SLAVE'。
mysqldump -uroot -p --all-databases --apply-slave-statements
--character-sets-dir
字元集文件的目錄
mysqldump -uroot -p --all-databases --character-sets-dir=/usr/local/mysql/share/mysql/charsets
--comments
附加註釋信息。預設為打開,可以用--skip-comments取消
mysqldump -uroot -p --all-databases (預設記錄註釋)
mysqldump -uroot -p --all-databases --skip-comments (取消註釋)
--compatible
導出的數據將和其它資料庫或舊版本的MySQL 相相容。值可以為ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,
要使用幾個值,用逗號將它們隔開。它並不保證能完全相容,而是儘量相容。
mysqldump -uroot -p --all-databases --compatible=ansi
--compact
導出更少的輸出信息(用於調試)。去掉註釋和頭尾等結構。可以使用選項:--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
mysqldump -uroot -p --all-databases --compact
--complete-insert, -c
使用完整的insert語句(包含列名稱)。這麼做能提高插入效率,但是可能會受到max_allowed_packet參數的影響而導致插入失敗。
mysqldump -uroot -p --all-databases --complete-insert
--compress, -C
在客戶端和伺服器之間啟用壓縮傳遞所有信息
mysqldump -uroot -p --all-databases --compress
--create-options, -a
在CREATE TABLE語句中包括所有MySQL特性選項。(預設為打開狀態)
mysqldump -uroot -p --all-databases
--databases, -B
導出幾個資料庫。參數後面所有名字參量都被看作資料庫名。
mysqldump -uroot -p --databases test mysql
--debug
輸出debug信息,用於調試。預設值為:d:t,/tmp/mysqldump.trace
mysqldump -uroot -p --all-databases --debug
mysqldump -uroot -p --all-databases --debug=” d:t,/tmp/debug.trace”
--debug-check
檢查記憶體和打開文件使用說明並退出。
mysqldump -uroot -p --all-databases --debug-check
--debug-info
輸出調試信息並退出
mysqldump -uroot -p --all-databases --debug-info
--default-character-set
設置預設字元集,預設值為utf8
mysqldump -uroot -p --all-databases --default-character-set=utf8
--delayed-insert
採用延時插入方式(INSERT DELAYED)導出數據
mysqldump -uroot -p --all-databases --delayed-insert
--delete-master-logs
master備份後刪除日誌. 這個參數將自動激活--master-data。
mysqldump -uroot -p --all-databases --delete-master-logs
--disable-keys
對於每個表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;語句引用INSERT語句。這樣可以更快地導入dump出來的文件,因為它是在插入所有行後創建索引的。該選項只適合MyISAM表,預設為打開狀態。
mysqldump -uroot -p --all-databases
--dump-slave
該選項將主的binlog位置和文件名追加到導出數據的文件中(show slave status)。設置為1時,將會以CHANGE MASTER命令輸出到數據文件;設置為2時,會在change前加上註釋。該選項將會打開--lock-all-tables,除非--single-transaction被指定。該選項會自動關閉--lock-tables選項。預設值為0。
mysqldump -uroot -p --all-databases --dump-slave=1
mysqldump -uroot -p --all-databases --dump-slave=2
--master-data
該選項將當前伺服器的binlog的位置和文件名追加到輸出文件中(show master status)。如果為1,將會輸出CHANGE MASTER 命令;如果為2,輸出的CHANGE MASTER命令前添加註釋信息。該選項將打開--lock-all-tables 選項,除非--single-transaction也被指定(在這種情況下,全局讀鎖在開始導出時獲得很短的時間;其他內容參考下麵的--single-transaction選項)。該選項自動關閉--lock-tables選項。
mysqldump -uroot -p --host=localhost --all-databases --master-data=1;
mysqldump -uroot -p --host=localhost --all-databases --master-data=2;
--events, -E
導出事件。
mysqldump -uroot -p --all-databases --events
--extended-insert, -e
使用具有多個VALUES列的INSERT語法。這樣使導出文件更小,並加速導入時的速度。預設為打開狀態,使用--skip-extended-insert取消選項。
mysqldump -uroot -p --all-databases
mysqldump -uroot -p --all-databases--skip-extended-insert (取消選項)
--fields-terminated-by
導出文件中忽略給定欄位。與--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p test test --tab=”/home/mysql” --fields-terminated-by=”#”
--fields-enclosed-by
輸出文件中的各個欄位用給定字元包裹。與--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#”
--fields-optionally-enclosed-by
輸出文件中的各個欄位用給定字元選擇性包裹。與--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#” --fields-optionally-enclosed-by =”#”
--fields-escaped-by
輸出文件中的各個欄位忽略給定字元。與--tab選項一起使用,不能用於--databases和--all-databases選項
mysqldump -uroot -p mysql user --tab=”/home/mysql” --fields-escaped-by=”#”
--flush-logs
開始導出之前刷新日誌。
請註意:假如一次導出多個資料庫(使用選項--databases或者--all-databases),將會逐個資料庫刷新日誌。除使用--lock-all-tables或者--master-data外。在這種情況下,日誌將會被刷新一次,相應的所以表同時被鎖定。因此,如果打算同時導出和刷新日誌應該使用--lock-all-tables 或者--master-data 和--flush-logs。
mysqldump -uroot -p --all-databases --flush-logs
--flush-privileges
在導出mysql資料庫之後,發出一條FLUSH PRIVILEGES 語句。為了正確恢復,該選項應該用於導出mysql資料庫和依賴mysql資料庫數據的任何時候。
mysqldump -uroot -p --all-databases --flush-privileges
--force
在導出過程中忽略出現的SQL錯誤。
mysqldump -uroot -p --all-databases --force
--help
顯示幫助信息並退出。
mysqldump --help
--hex-blob
使用十六進位格式導出二進位字元串欄位。如果有二進位數據就必須使用該選項。影響到的欄位類型有BINARY、VARBINARY、BLOB。
mysqldump -uroot -p --all-databases --hex-blob
--host, -h
需要導出的主機信息
mysqldump -uroot -p --host=localhost --all-databases
--ignore-table
不導出指定表。指定忽略多個表時,需要重覆多次,每次一個表。每個表必須同時指定資料庫和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……
mysqldump -uroot -p --host=localhost --all-databases --ignore-table=mysql.user
--include-master-host-port
在--dump-slave產生的'CHANGE MASTER TO..'語句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'
mysqldump -uroot -p --host=localhost --all-databases --include-master-host-port
--insert-ignore
在插入行時使用INSERT IGNORE語句.
mysqldump -uroot -p --host=localhost --all-databases --insert-ignore
--lines-terminated-by
輸出文件的每行用給定字元串劃分。與--tab選項一起使用,不能用於--databases和--all-databases選項。
mysqldump -uroot -p --host=localhost test test --tab=”/tmp/mysql” --lines-terminated-by=”##”
--lock-all-tables, -x
提交請求鎖定所有資料庫中的所有表,以保證數據的一致性。這是一個全局讀鎖,並且自動關閉--single-transaction 和--lock-tables 選項。
mysqldump -uroot -p --host=localhost --all-databases --lock-all-tables
--lock-tables, -l
開始導出前,鎖定所有表。用READ LOCAL鎖定表以允許MyISAM表並行插入。對於支持事務的表例如InnoDB和BDB,--single-transaction是一個更好的選擇,因為它根本不需要鎖定表。
請註意當導出多個資料庫時,--lock-tables分別為每個資料庫鎖定表。因此,該選項不能保證導出文件中的表在資料庫之間的邏輯一致性。不同資料庫表的導出狀態可以完全不同。
mysqldump -uroot -p --host=localhost --all-databases --lock-tables
--log-error
附加警告和錯誤信息到給定文件
mysqldump -uroot -p --host=localhost --all-databases --log-error=/tmp/mysqldump_error_log.err
--max_allowed_packet
伺服器發送和接受的最大包長度。
mysqldump -uroot -p --host=localhost --all-databases --max_allowed_packet=10240
--net_buffer_length
TCP/IP和socket連接的緩存大小。
mysqldump -uroot -p --host=localhost --all-databases --net_buffer_length=1024
--no-autocommit
使用autocommit/commit 語句包裹表。
mysqldump -uroot -p --host=localhost --all-databases --no-autocommit
--no-create-db, -n
只導出數據,而不添加CREATE DATABASE 語句。
mysqldump -uroot -p --host=localhost --all-databases --no-create-db
--no-create-info, -t
只導出數據,而不添加CREATE TABLE 語句。
mysqldump -uroot -p --host=localhost --all-databases --no-create-info
--no-data, -d
不導出任何數據,只導出資料庫表結構。
mysqldump -uroot -p --host=localhost --all-databases --no-data
--no-set-names, -N
等同於--skip-set-charset
mysqldump -uroot -p --host=localhost --all-databases --no-set-names
--opt
等同於--add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, --disable-keys 該選項預設開啟, 可以用--skip-opt禁用.
mysqldump -uroot -p --host=localhost --all-databases --opt
--order-by-primary
如果存在主鍵,或者第一個唯一鍵,對每個表的記錄進行排序。在導出MyISAM表到InnoDB表時有效,但會使得導出工作花費很長時間。
mysqldump -uroot -p --host=localhost --all-databases --order-by-primary
--password, -p
連接資料庫密碼
--pipe(windows系統可用)
使用命名管道連接mysql
mysqldump -uroot -p --host=localhost --all-databases --pipe
--port, -P
連接資料庫埠號
--protocol
使用的連接協議,包括:tcp, socket, pipe, memory.
mysqldump -uroot -p --host=localhost --all-databases --protocol=tcp
--quick, -q
不緩衝查詢,直接導出到標準輸出。預設為打開狀態,使用--skip-quick取消該選項。
mysqldump -uroot -p --host=localhost --all-databases
mysqldump -uroot -p --host=localhost --all-databases --skip-quick
--quote-names,-Q
使用(`)引起表和列名。預設為打開狀態,使用--skip-quote-names取消該選項。
mysqldump -uroot -p --host=localhost --all-databases
mysqldump -uroot -p --host=localhost --all-databases --skip-quote-names
--replace
使用REPLACE INTO 取代INSERT INTO.
mysqldump -uroot -p --host=localhost --all-databases --replace
--result-file, -r
直接輸出到指定文件中。該選項應該用在使用回車換行對(\\r\\n)換行的系統上(例如:DOS,Windows)。該選項確保只有一行被使用。
mysqldump -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt
--routines, -R
導出存儲過程以及自定義函數。
mysqldump -uroot -p --host=localhost --all-databases --routines
--set-charset
添加'SET NAMES default_character_set'到輸出文件。預設為打開狀態,使用--skip-set-charset關閉選項。
mysqldump -uroot -p --host=localhost --all-databases
mysqldump -uroot -p --host=localhost --all-databases --skip-set-charset
--single-transaction
該選項在導出數據之前提交一個BEGIN SQL語句,BEGIN 不會阻塞任何應用程式且能保證導出時資料庫的一致性狀態。它只適用於多版本存儲引擎,僅InnoDB。本選項和--lock-tables 選項是互斥的,因為LOCK TABLES 會使任何掛起的事務隱含提交。要想導出大表的話,應結合使用--quick 選項。
mysqldump -uroot -p --host=localhost --all-databases --single-transaction
--dump-date
將導出時間添加到輸出文件中。預設為打開狀態,使用--skip-dump-date關閉選項。
mysqldump -uroot -p --host=localhost --all-databases
mysqldump -uroot -p --host=localhost --all-databases --skip-dump-date
--skip-opt
禁用–opt選項.
mysqldump -uroot -p --host=localhost --all-databases --skip-opt
--socket,-S
指定連接mysql的socket文件位置,預設路徑/tmp/mysql.sock
mysqldump -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock
--tab,-T
為每個表在給定路徑創建tab分割的文本文件。註意:僅僅用於mysqldump和mysqld伺服器運行在相同機器上。註意使用--tab不能指定--databases參數
mysqldump -uroot -p --host=localhost test test --tab="/home/mysql"
--tables
覆蓋--databases (-B)參數,指定需要導出的表名,在後面的版本會使用table取代tables。
mysqldump -uroot -p --host=localhost --databases test --tables test
--triggers
導出觸發器。該選項預設啟用,用--skip-triggers禁用它。
mysqldump -uroot -p --host=localhost --all-databases --triggers
--tz-utc
在導出頂部設置時區TIME_ZONE='+00:00' ,以保證在不同時區導出的TIMESTAMP 數據或者數據被移動其他時區時的正確性。
mysqldump -uroot -p --host=localhost --all-databases --tz-utc
--user, -u
指定連接的用戶名。
--verbose, --v
輸出多種平臺信息。
--version, -V
輸出mysqldump版本信息並退出
--where, -w
只轉儲給定的WHERE條件選擇的記錄。請註意如果條件包含命令解釋符專用空格或字元,一定要將條件引用起來。
mysqldump -uroot -p --host=localhost --all-databases --where=” user=’root’”
--xml, -X
導出XML格式.
mysqldump -uroot -p --host=localhost --all-databases --xml
--plugin_dir
客戶端插件的目錄,用於相容不同的插件版本。
mysqldump -uroot -p --host=localhost --all-databases --plugin_dir=”/usr/local/lib/plugin”
--default_auth
客戶端插件預設使用許可權。
mysqldump -uroot -p --host=localhost --all-databases --default-auth=”/usr/local/lib/plugin/<PLUGIN>”
複製代碼
錯誤處理
1.unknown option '--no-beep'
第一種方法:刪除my.ini[client]下的 no-beep 參數;
第二種方法:在 mysqldump 後加--no-defaults參數 。
總結
文章中列舉了一些常用的導出操作,還有很多其它的參數也會經常用到,包括“--add-drop-database”,“--apply-slave-statements”,“--triggers”等。客戶端的導入導出功能也是不錯的選擇,比如workbench、navicat;其中navicat的導出嚮導中可以有很多文件格式可以選擇。
--tab的快速導出導入數據是個不錯的方法,它會在指定的目錄下生成一個sql表結構文件和一個text數據文件
-- 資料庫的導入
把備份的所有數據文件還原:
mysql -u root -p < all_database_sql.sql,這裡不需要指定庫,因為是全部資料庫
mysql -u root -p mysql < mysql_database_sql.sql #這裡就需要指定是mysql庫了