借用MySQL 的 auto_increment 特性可以產(chǎn)生唯一的可靠ID。
表定義,關鍵在于auto_increment,和UNIQUE KEY的設置:
1 2 3 4 5 6 | CREATE TABLE `Tickets64` ( `id` bigint (20) unsigned NOT NULL auto_increment, `stub` char (1) NOT NULL default '' , PRIMARY KEY (`id`), UNIQUE KEY `stub` (`stub`) ) ENGINE=MyISAM |
需要使用時,巧用replace into語法來獲取值,結(jié)合表定義的UNIQUE KEY,確保了一條記錄就可以滿足ID生成器的需求:
1 2 | REPLACE INTO Tickets64 (stub) VALUES ( 'a' ); SELECT LAST_INSERT_ID(); |
以上方式中,通過MySQL的機制,可以確保此ID的唯一和自增,且適用于多并發(fā)的場景。官方對此的描述:https://dev.mysql.com/doc/refman/5.0/en/information-functions.html
1 2 3 | It is multi-user safe because multiple clients can issue the UPDATE statement and get their own sequence value with the SELECT statement (or mysql_insert_id()), without affecting or being affected by other clients that generate their own sequence values. |
需要注意的是,若client采用PHP,則不能使用mysql_insert_id()獲取ID,原因見《mysql_insert_id() 在bigint型AI字段遇到的問題》:http://kaifage.com/notes/99/mysql-insert-id-issue- with-bigint-ai-field.html。
Flickr 采取了此方案: http://code.flickr.net/2010/02/08/ticket-servers-distributed-unique-primary-keys-on-the-cheap/
相關:
http://www.zhihu.com/question/30674667
http://my.oschina.net/u/142836/blog/174465
mysql 5.1已經(jīng)到了beta版,官方網(wǎng)站上也陸續(xù)有一些文章介紹,比如上次看到的Improving Database Performance with Partitioning。在使用分區(qū)的前提下,可以用mysql實現(xiàn)非常大的數(shù)據(jù)量存儲。今天在mysql的站上又看到一篇進階的文章 —— 按日期分區(qū)存儲。如果能夠?qū)崿F(xiàn)按日期分區(qū),這對某些時效性很強的數(shù)據(jù)存儲是相當實用的功能。下面是從這篇文章中摘錄的一些內(nèi)容。
最直觀的方法,就是直接用年月日這種日期格式來進行常規(guī)的分區(qū):
上面的例子中,就是直接用"Y-m-d"的格式來對一個table進行分區(qū),可惜想當然往往不能奏效,會得到一個錯誤信息:
ERROR 1064 (42000): VALUES value must be of same type as partition function near '),
partition p1 VALUES LESS THAN ('2010-01-01'))' at line 3
上述分區(qū)方式?jīng)]有成功,而且明顯的不經(jīng)濟,老練的DBA會用整型數(shù)值來進行分區(qū):
搞定?接著往下分析
萬惡的mysql居然對上面的sql使用全表掃描,而不是按照我們的日期分區(qū)分塊查詢。原文中解釋到MYSQL的優(yōu)化器并不認這種日期形式的分區(qū),花了大量的篇幅來引誘俺走上歧路,過分。
mysql優(yōu)化器支持以下兩種內(nèi)置的日期函數(shù)進行分區(qū):
看個例子:
以to_days()函數(shù)分區(qū)成功,我們分析一下看看:
可以看到,mysql優(yōu)化器這次不負眾望,僅僅在p1分區(qū)進行查詢。在這種情況下查詢,真的能夠帶來提升查詢效率么?下面分別對這次建立的part_date3和之前分區(qū)失敗的part_date1做一個查詢對比:
可以看到,分區(qū)正確的話query花費時間為4秒,而分區(qū)錯誤則花費時間40秒(相當于沒有分區(qū)),效率有90%的提升!所以我們千萬要正確的使用分區(qū)功能,分區(qū)后務必用explain驗證,這樣才能獲得真正的性能提升。
注意:
在mysql5.1中建立分區(qū)表的語句中,只能包含下列函數(shù):
ABS()
CEILING() and FLOOR() (在使用這2個函數(shù)的建立分區(qū)表的前提是使用函數(shù)的分區(qū)鍵是INT類型),例如
mysql> CREATE TABLE t (c FLOAT) PARTITION BY LIST( FLOOR(c) )( -> PARTITION p0 VALUES IN (1,3,5), -> PARTITION p1 VALUES IN (2,4,6) -> );; ERROR 1491 (HY000): The PARTITION function returns the wrong typemysql> CREATE TABLE t (c int) PARTITION BY LIST( FLOOR(c) )( -> PARTITION p0 VALUES IN (1,3,5), -> PARTITION p1 VALUES IN (2,4,6) -> ); Query OK, 0 rows affected (0.01 sec)
DAY()
DAYOFMONTH()
DAYOFWEEK()
DAYOFYEAR()
DATEDIFF()
EXTRACT()
HOUR()
MICROSECOND()
MINUTE()
MOD()
MONTH()
QUARTER()
SECOND()
TIME_TO_SEC()
TO_DAYS()
WEEKDAY()
YEAR()
YEARWEEK()
【MySQL使用分區(qū)表的好處】
1.可以把一些歸類的數(shù)據(jù)放在一個分區(qū)中,可以減少服務器檢查數(shù)據(jù)的數(shù)量加快查詢。
2.方便維護,通過刪除分區(qū)來刪除老的數(shù)據(jù)。
3.分區(qū)數(shù)據(jù)可以被分布到不同的物理位置,可以做分布式有效利用多個硬盤驅(qū)動器。
【MySQL可以建立四種分區(qū)類型的分區(qū)】
RANGE 分區(qū):基于屬于一個給定連續(xù)區(qū)間的列值,把多行分配給分區(qū)。
LIST 分區(qū):類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個離散值集合中的某個值來進行選擇。
HASH分區(qū):基于用戶定義的表達式的返回值來進行選擇的分區(qū),該表達式使用將要插入到表中的這些行的列值進行計算。這個函數(shù)可以包含MySQL 中有效的、產(chǎn)生非負整數(shù)值的任何表達式。
KEY 分區(qū):類似于按HASH分區(qū),區(qū)別在于KEY分區(qū)只支持計算一列或多列,且MySQL 服務器提供其自身的哈希函數(shù)。必須有一列或多列包含整數(shù)值。
一般用得多的是range分區(qū)和list分區(qū)。
【查看是否支持分區(qū)】
show variables like "%part%";
【如何查看mysql分區(qū)信息】
select * from INFORMATION_SCHEMA.PARTITIONS where table_name='user'; (這里查看user表的分區(qū)信息)
【查看執(zhí)行一條查詢SQL會掃描的分區(qū)】
explain partitions select * from user where id=10;
【如何創(chuàng)建分區(qū)】
1.建表時就分區(qū):
CREATE TABLE IF NOT EXISTS `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID',
`name` varchar(50) NOT NULL DEFAULT '' COMMENT '名稱',
`sex` int(1) NOT NULL DEFAULT '0' COMMENT '0為男,1為女',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
PARTITION BY RANGE (id) (
PARTITION p0 VALUES LESS THAN (3),
PARTITION p1 VALUES LESS THAN (6),
PARTITION p2 VALUES LESS THAN (9),
PARTITION p3 VALUES LESS THAN (12),
PARTITION p4 VALUES LESS THAN MAXVALUE
);
2.對現(xiàn)有表進行分區(qū):可以對現(xiàn)有表進行分區(qū),并且會按規(guī)則自動的將表中的數(shù)據(jù)分配相應的分區(qū)中
alter table 表名 partition by RANGE(字段)
(PARTITION p1 VALUES less than (1),
PARTITION p2 VALUES less than (5),
PARTITION p3 VALUES less than MAXVALUE);
【刪除一個分區(qū)】
(當刪除了一個分區(qū),也同時刪除了該分區(qū)中所有的數(shù)據(jù))
ALTER TABLE 表名 DROP PARTITION p2;
【分區(qū)合并】
下面的SQL,將p201001 - p201009 合并為3個分區(qū)p2010Q1 - p2010Q3
ALTER TABLE sale_data
REORGANIZE PARTITION p201001,p201002,p201003,
p201004,p201005,p201006,
p201007,p201008,p201009 INTO
(
PARTITION p2010Q1 VALUES LESS THAN (201004),
PARTITION p2010Q2 VALUES LESS THAN (201007),
PARTITION p2010Q3 VALUES LESS THAN (201010)
);
【分區(qū)的拆分】
下面的SQL,將p2010Q1 分區(qū),拆分為s2009 與s2010 兩個分區(qū)
ALTER TABLE sale_data REORGANIZE PARTITION p2010Q1 INTO (
PARTITION s2009 VALUES LESS THAN (201001),
PARTITION s2010 VALUES LESS THAN (201004)
);
【分區(qū)索引的局限】
1.所有分區(qū)都要使用同樣的引擎。
2.分區(qū)表的每一個唯一索引必須包含由分區(qū)函數(shù)引用的列。
3.mysql能避免查詢所有的分區(qū),但仍然鎖定了所有分區(qū)。
4.分區(qū)函數(shù)能使用的函數(shù)和表達式有限,例如函數(shù)有上面的4種。
5.分區(qū)不支持外鍵。
6.不能使用LOAD INDEX INTO CACHE
7.分區(qū)并不能總是改善性能,要進行性能評測。
mysql安裝為什么大部分使用二進制安裝。而不是源碼手動去編譯?
mysql使用的glibc進行開發(fā)的。glibc庫是一個底層api,所以只要是linux,都會有glibc庫。所以,mysql安裝不需要考慮環(huán)境是否符合要求。移植性很方便。直接將編譯好的二進制代碼復制到另外一個機器上,也是可以用的。
原 理性東西:一般在linux下安裝一個軟件,不同軟件所需要的函數(shù)庫不同。于是會遇到一個現(xiàn)象:一個軟件復制到另外一個平臺可能無法運行。安裝軟件需要先 偵測環(huán)境就是出于此考慮。因為mysql使用的是通用的glibc函數(shù)庫。沒有對其他東西的依賴性。所以,從一個平臺復制到另外一個平臺能夠通用。并不需 要去偵測環(huán)境。直接使用編譯好的二進制即可
手動編譯安裝,顯得步驟麻煩。基于mysql的特點,二進制安裝完全可以。
注:mysql5.5安裝的時候,需要用到cmake命令,所以需要保證你的機器上安裝了該命令。沒有的話,還要去安裝該cmake。也顯得麻煩。我暫時不想去安裝最新版本的了。
如果使用二進制安裝升級怎么進行?
升級獲取的還是二進制壓縮包。那么,直接將指向目錄切換到新的目錄即可。
不需要涉及到像php一樣,手動編譯可以達到自己定制模塊的好處。而mysql安裝的時候不需要涉及到模塊
mysql官方建議安裝方式:二進制安裝。
實踐過程
大致思路就是:解壓二進制文件放到指定的目錄。然后安裝基本的數(shù)據(jù)庫,權限方面會用到。
然后,啟動mysql就行了。
第一步:創(chuàng)建一個用戶組和用戶。
組名和用戶名的名字都為mysql。
命令:1.groupadd mysql
2.useradd -r -g mysql mysql
第二步:解壓二進制壓縮包。
一般放到"/usr/local/src"目錄下去。
結(jié)果會變成:/usr/local/src/mysql安裝目錄
有很多種方式。一般可以直接進去要解壓要存放的目錄。
運行命令:tar zxvf 壓縮包源 注釋:第二個參數(shù)可以填要解壓到的位置。第二個參數(shù)不填,就會將壓縮包源解壓到運行tar命令的當前目錄。一般都是使用這種特性進行解壓:你要解壓到哪里就先進入哪里運行tar命令。
第三步:建立一個軟鏈接。
在"usr/local"下建立一個軟鏈接(自己定義名為mysql)。軟鏈接的目錄是為了指向"/usr/local/src/mysql安裝目錄"
命令:ln -s /usr/local/src/mysql安裝目錄 /usr/local/mysql 參數(shù)說明:-s參數(shù)表示建立軟鏈接
去local目錄下查看,看是否成功生成了一個軟鏈接。使用"ls -al"查看,特點是軟連接上會有個箭頭符號。
其實這一步就是為了提供一種快捷操作的方式。其實不建立軟連接也是可以用的,為什么要這樣做?
升級管理有用:新版本單獨建立一個目錄存放的。假如你升級mysql了。只要將這個軟連接指向的目錄修改即可。
第四步:權限檢查與修改
主要是保證"mysql安裝目錄"的所有者為mysql用戶,所屬組也為mysql組。
1.chown -R mysql . //將當前目錄的所有者改為mysql用戶 要加上-R參數(shù)。這個參數(shù)表示循環(huán)遍歷子節(jié)點。子節(jié)點都起作用
2.chgrp -R mysql . //將當前目錄的所有組改為mysql組
常見的問題:忘記加上-R參數(shù)。結(jié)果下面節(jié)點沒有權限。啟動錯誤,訪問錯誤等等一系列的問題。
第五步:安裝初始化數(shù)據(jù)庫
運行mysql安裝目錄下的文件:/scripts/mysql_install_db
命令備忘:scripts/mysql_install_db --user=mysql //這是進入mysql安裝目錄下進行運行的,所以需要輸入路徑"scripts/"
注意:必須在安裝目錄下執(zhí)行。不能切換到scripts目錄下,然后執(zhí)行"./mysql_install_db --user=mysql",否則會報如下錯誤:
FATAL ERROR: Could not find ./bin/my_print_defaults
因為腳本mysql_install_db里面所使用的是這種形式的相對路徑"./bin/my_print_defaults",所以必須是在"mysql安裝目錄"下,才能找得到所需文件。
第二次試驗的時候,還報出一個錯誤:./bin/my_print_defaults: cannot execute binary file
第六步:my.cnf配置文件拷貝
將my.cnf文件移到etc/目錄下去。
命令:cp support-files/my-medium.cnf /etc/my.cnf
第七步:啟動mysql
馬上啟動mysql的命令是:bin/mysqld_safe --user=mysql & //"&"表示在后臺運行
這里使用&的經(jīng)驗備忘:執(zhí)行上面命令后,一直定在一個地方。沒有任何反應了。并沒有報錯信息。還是成功的。此時使用ctrl+c。然后去看看
之后,想讓服務器啟動的時候就跟著啟動mysql服務器,在一個目錄下放一個文件:
cp support-files/mysql.server /etc/init.d/mysql.server
support-files/mysql.server在二進制安裝目錄下可以找到的。
完成后進行的步驟:
第一步:如何查看mysql是否安裝成功。
一個方法是:去查看3306端口是否開啟
命令:netstat -ntl 可以列出所有偵聽的端口
第二個方法:使用mysql命令連接一次服務器
命令: mysql -u root
小技巧:為了省去每次執(zhí)行客戶端都要進入目錄的麻煩。將客戶端的路徑加入環(huán)境變量中去。
shell命令:export PATH=$PATH:/usr/local/src/mysql-5.1/bin/
export命令備忘: export 變量名=變量值,這里變量名是PATH 變量值設置成在原來的$PATH基礎上加,有多個值,那么值之間以分號":"隔開。
這樣,在任意路徑中。都可以通過:"mysql -u 用戶名 -p" 的形式使用客戶端了。
所遇問題總結(jié)
第一個問題:
問題描述:SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/usr/local/mysql/tmp/mysql.sock'
問題經(jīng)驗:
不能通過 '/tmp/mysql.sock'連到服務器,而php標準配置正是用過'/tmp/mysql.sock'
1.php.ini中可以配置通過哪個sock去連接mysql
2.而mysql的配置文件中也可以自由配置使用哪個位置的sock文件
錯誤提示中顯示了錯誤2002號。結(jié)合手冊如下說明:
錯誤:2002 (CR_CONNECTION_ERROR)
消息:不能通過套接字'%s' (%d)連接到本地MySQL服務器。
第二個問題:權限問題。
解決問題的經(jīng)驗是:如果遇到啟動mysql錯誤。首先應該去看看權限是否有。設置對了沒。
比如啟動使用"service mysqld start"常常看到如下錯誤提示:
mysqld_safe Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
110306 23:17:20 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
110306 23:17:20 mysqld_safe mysqld from pid file /usr/local/mysql/data/localhost.localdomain.pid ended
看不懂意思。這些信息會在data/*.err文件中記錄的。不知道上述報錯信息的原因。
查看目錄下的子節(jié)點,發(fā)現(xiàn)所有者和所屬組并不都是mysql。我直接設置好目錄的所有者和所屬組都是mysql后。就行了。
shell>groupadd mysql
shell>useradd -r -g mysql mysql
shell>cd /usr/local
shell>tar zxvf
/path/to/mysql-VERSION-OS
.tar.gz
shell>ln -s
full-path-to-mysql-VERSION-OS
mysql
shell>cd mysql
shell>chown -R mysql .
shell>chgrp -R mysql .
shell>scripts/mysql_install_db
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data--user=mysql
shell>chown -R root .
shell>chown -R mysql data
# Next command is optional
shell>cp support-files/my-medium.cnf /etc/my.cnf
shell>bin/mysqld_safe
--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data--user=mysql &
# Next command is optional
shell>cp support-files/mysql.server /etc/init.d/mysql.server
啟動后的日志寫在/var/log/mysql/error.log文件下,可直接到這個文件下去查看。
還原一個數(shù)據(jù)庫:mysql -h localhost -u root -p123456 www
備份一個數(shù)據(jù)庫:mysqldump -h localhost -u root -p123456 www > d:\www2008-2-26.sql
其中WWW為數(shù)據(jù)庫名
//以下是在程序中進行測試
//$command = “mysqldump –opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile”;
$command=”mysqldump -h localhost -u root -p123456 guestbook > guestbook2-29.sql”;
system($command);
echo “success”;
************************************************
備份MySQL數(shù)據(jù)庫的命令
mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql
備份MySQL數(shù)據(jù)庫為帶刪除表的格式
備份MySQL數(shù)據(jù)庫為帶刪除表的格式,能夠讓該備份覆蓋已有數(shù)據(jù)庫而不需要手動刪除原有數(shù)據(jù)庫。
mysqldump –add-drop-table -uusername -ppassword databasename > backupfile.sql
直接將MySQL數(shù)據(jù)庫壓縮備份
mysqldump -hhostname -uusername -ppassword databasename | gzip > backupfile.sql.gz
備份MySQL數(shù)據(jù)庫某個(些)表
mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql
同時備份多個MySQL數(shù)據(jù)庫
mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql
僅僅備份數(shù)據(jù)庫結(jié)構
mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql
備份服務器上所有數(shù)據(jù)庫
mysqldump –all-databases > allbackupfile.sql
還原MySQL數(shù)據(jù)庫的命令
mysql -hhostname -uusername -ppassword databasename < backupfile.sql
還原壓縮的MySQL數(shù)據(jù)庫
gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename
將數(shù)據(jù)庫轉(zhuǎn)移到新服務器
mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename
幾個常用用例:
1.導出整個數(shù)據(jù)庫
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 > 導出的文件名
mysqldump -u root -p dataname >dataname.sql
這個時候會提示要你輸入root用戶名的密碼,輸入密碼后dataname數(shù)據(jù)庫就成功備份在mysql/bin/目錄中.
2.導出一個表
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名> 導出的文件名
mysqldump -u root -p dataname users> dataname_users.sql
3.導出一個數(shù)據(jù)庫結(jié)構
mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
-d 沒有數(shù)據(jù) –add-drop-table 在每個create語句之前增加一個drop table
4.導入數(shù)據(jù)庫
常用source 命令
進入mysql數(shù)據(jù)庫控制臺,
如mysql -u root -p
mysql>use 數(shù)據(jù)庫
然后使用source命令,后面參數(shù)為腳本文件(如這里用到的.sql)
mysql>source d:\wcnc_db.sql
mysqldump支持下列選項:
–add-locks
在每個表導出之前增加LOCK TABLES并且之后UNLOCK TABLE。(為了使得更快地插入到MySQL)。
–add-drop-table
在每個create語句之前增加一個drop table。
–allow-keywords
允許創(chuàng)建是關鍵詞的列名字。這由表名前綴于每個列名做到。
-c, –complete-insert
使用完整的insert語句(用列名字)。
-C, –compress
如果客戶和服務器均支持壓縮,壓縮兩者間所有的信息。
–delayed
用INSERT DELAYED命令插入行。
-e, –extended-insert
使用全新多行INSERT語法。(給出更緊縮并且更快的插入語句)
-#, –debug[=option_string]
跟蹤程序的使用(為了調(diào)試)。
–help
顯示一條幫助消息并且退出。
–fields-terminated-by=…
–fields-enclosed-by=…
–fields-optionally-enclosed-by=…
–fields-escaped-by=…
–fields-terminated-by=…
這些選擇與-T選擇一起使用,并且有相應的LOAD DATA INFILE子句相同的含義。
LOAD DATA INFILE語法。
-F, –flush-logs
在開始導出前,洗掉在MySQL服務器中的日志文件。
-f, –force,
即使我們在一個表導出期間得到一個SQL錯誤,繼續(xù)。
-h, –host=..
從命名的主機上的MySQL服務器導出數(shù)據(jù)。缺省主機是localhost。
-l, –lock-tables.
為開始導出鎖定所有表。
-t, –no-create-info
不寫入表創(chuàng)建信息(CREATE TABLE語句)
-d, –no-data
不寫入表的任何行信息。如果你只想得到一個表的結(jié)構的導出,這是很有用的!
–opt
同–quick –add-drop-table –add-locks –extended-insert –lock-tables。
應該給你為讀入一個MySQL服務器的盡可能最快的導出。
-pyour_pass, –password[=your_pass]
與服務器連接時使用的口令。如果你不指定“=your_pass”部分,mysqldump需要來自終端的口令。
-P port_num, –port=port_num
與一臺主機連接時使用的TCP/IP端口號。(這用于連接到localhost以外的主機,因為它使用 Unix套接字。)
-q, –quick
不緩沖查詢,直接導出至stdout;使用mysql_use_result()做它。
-S /path/to/socket, –socket=/path/to/socket
與localhost連接時(它是缺省主機)使用的套接字文件。
-T, –tab=path-to-some-directory
對于每個給定的表,創(chuàng)建一個table_name.sql文件,它包含SQL CREATE 命令,和一個table_name.txt文件,它包含數(shù)據(jù)。注意:這只有在mysqldump運行在mysqld守護進程運行的同一臺機器上的時候才工 作。.txt文件的格式根據(jù)–fields-xxx和 –lines–xxx選項來定。
-u user_name, –user=user_name
與服務器連接時,MySQL使用的用戶名。缺省值是你的Unix登錄名。
-O var=option, –set-variable var=option
設置一個變量的值。可能的變量被列在下面。
-v, –verbose
冗長模式。打印出程序所做的更多的信息。
-V, –version
打印版本信息并且退出。
-w, –where=’where-condition’
只導出被選擇了的記錄;注意引號是強制的!
“–where=user=’jimf’” “-wuserid>1″ “-wuserid<1″
最常見的mysqldump使用可能制作整個數(shù)據(jù)庫的一個備份:
mysqldump –opt database > backup-file.sql
但是它對用來自于一個數(shù)據(jù)庫的信息充實另外一個MySQL數(shù)據(jù)庫也是有用的:
mysqldump –opt database | mysql –host=remote-host -C database
由于mysqldump導出的是完整的SQL語句,所以用mysql客戶程序很容易就能把數(shù)據(jù)導入了:
shell> mysqladmin create target_db_name
shell> mysql target_db_name < backup-file.sql
就是
shell> mysql 庫名 < 文件名