說來慚愧盗痒,雖計(jì)算機(jī)專業(yè)出身,了解些Linux命令低散,但從未熟練使用過linux操作系統(tǒng)俯邓。今入手了Mac,簡(jiǎn)單整理下OS系統(tǒng)下Mysql常用命令熔号。
導(dǎo)出數(shù)據(jù)
前文說到稽鞭,吾僅是為了dump一份測(cè)試數(shù)據(jù)到本地環(huán)境,以擺脫數(shù)據(jù)庫連接 IP白名單引镊,那么我們就具體dump數(shù)據(jù)庫的過程為由朦蕴,說明下具體牽涉的常用MySQL命令。
1.導(dǎo)出數(shù)據(jù)庫(表)
導(dǎo)出整個(gè)數(shù)據(jù)庫
mysqldump -u 用戶名 -p --default-character-set=latin1 數(shù)據(jù)庫名 > 導(dǎo)出的文件名(數(shù)據(jù)庫默認(rèn)編碼是latin1)
such as : mysqldump -u root -p operate > operate.sql
導(dǎo)出一個(gè)表
mysqldump -u 用戶名 -p 數(shù)據(jù)庫名 表名> 導(dǎo)出的文件名
such as: ?mysqldump -u root -p operate op_company_user> op_company_user.sql
導(dǎo)出數(shù)據(jù)庫結(jié)構(gòu)
mysqldump -u 用戶名 -p -d -add-drop-table 數(shù)據(jù)庫名>文件名
tips:-d是沒有數(shù)據(jù)弟头,-add-drop-table在每個(gè)create語句之前增加一個(gè)drop table
2. 導(dǎo)入數(shù)據(jù)庫
source operate.sql
或者:mysqldump -u root -p operate < operate.sql
或者:mysql -u root -p -D operate < operate.sql
3. 數(shù)據(jù)庫相關(guān)操作
創(chuàng)建數(shù)據(jù)庫
create database operate;
刪除數(shù)據(jù)庫
drop database operate;
連接數(shù)據(jù)庫
use operate;
查看當(dāng)前使用的數(shù)據(jù)庫
select database();
當(dāng)前數(shù)據(jù)庫包含的表信息
show tables;
顯示所有的數(shù)據(jù)庫:
show databases;
tips: mysql的退出:quit or exit;
4. 表相關(guān)操作吩抓,操作之前應(yīng)連接某個(gè)數(shù)據(jù)庫
tips: 視為常用且基礎(chǔ)的命令,此處簡(jiǎn)單一筆帶過亮瓷。
新建表
create table <表名> ( <字段名1> <類型1> [,..<字段名n> <類型n>]);
查詢表結(jié)構(gòu)
show create table op_comapny_user;
或 desc/show columns from op_company_user;
刪除表
drop table op_company_user;
表數(shù)據(jù)的增刪改查
insert into <表名> [( <字段名1>[,..<字段名n > ])] values ( 值1 )[, ( 值n )]
select <字段1琴拧,字段2,...> from < 表名 > where < 表達(dá)式 > [limit 0,2]
delete from 表名 where 表達(dá)式
update 表名 set 字段=新值,… where 條件
mysql> update MyClass set name='Mary' where id=1;
表結(jié)構(gòu)的修改
alter table 表名 add/modify/drop 字段 類型 其他;
rename table 原表名 to 新表名;
mysql數(shù)據(jù)庫的授權(quán)
比如新建一個(gè)testuser用戶賬號(hào)可以訪問嘱支,即連接到數(shù)據(jù)庫test:
grant usage on test.* to testuser@localhost;
然后蚓胸,指定testuser用戶可以執(zhí)行那些操作:
grant select,insert,delete,create,drop on test.* to testuser@localhost?
identified by '密碼'挣饥;
such as a completely case as follows:
#給hannah賦予所有庫的所有權(quán)限
GRANT ALL PRIVILEGES ON *.* TO 'hannah'@ '%' IDENTIFIED BY '123123' WITH GRANT OPTION;
#重新載入賦權(quán)表
FLUSH PRIVILEGES;
#收回權(quán)限(不包含賦權(quán)權(quán)限)
REVOKE ALL PRIVILEGES ON *.* FROM hannah;
#收回賦權(quán)權(quán)限
REVOKE GRANT OPTION ON *.* FROM hannah;
#重新載入賦權(quán)表
FLUSH PRIVILEGES;
連接到遠(yuǎn)程主機(jī)上的Mysql
mysql -h ip地址 -u root -p?
至此,Mysql常用命令的介紹暫告一段落沛膳,由于默認(rèn)大家具有一定的Mysql基礎(chǔ)扔枫,我們只是做了簡(jiǎn)單梳理匯總,沒有面面俱到(比如group by, having count, order by等并未提及)锹安。下面貼上鄙人的一段真實(shí)經(jīng)歷短荐,希望對(duì)遇到類似問題的小伙伴的有一定的幫助,或者僅以鄙人之愚蠢博君一樂~~??
話說回到初心叹哭,dump一份測(cè)試環(huán)境數(shù)據(jù)到本地以擺脫數(shù)據(jù)庫IP白名單的限制忍宋,進(jìn)而便于本地的開發(fā)測(cè)試。
經(jīng)由source命令將dunmp出的.sql文件在本地執(zhí)行后风罩,我們本地終于具有了和測(cè)試環(huán)境基本一致的表結(jié)構(gòu)和數(shù)據(jù)糠排。下一步就是要修改配置文件,數(shù)據(jù)庫連接從遠(yuǎn)程測(cè)試庫修改到本地超升。偶們用的是CI框架入宦,直接在config文件夾下修改database.php文件即可:添加一個(gè)active_group,并配置相關(guān)db信息室琢,大致情況如下截圖:
一開始乾闰,我將hostname='localhost:3306'(鄙人印象中l(wèi)ocalhost與127.0.0.1基本等價(jià)撒),然餓盈滴。涯肩。。頁面錯(cuò)誤信息:"?Warning: mysqli::real_connect(): (HY000/2002).......refused:",一臉懵逼巢钓,不要方宽菜,?錯(cuò)誤我們見到的還少嗎,不要大驚小怪竿报,冷靜下來~~~
先查看了下mysql.server status: running OK铅乡,那么問題來了:既然被連接方活得好好的,那連接refused??烈菌,只能是連接方打開的方式或姿勢(shì)不對(duì)誒阵幸。。芽世。
1.首先登錄MySQL命令行挚赊,查看unix socket所在目錄,輸入status济瓢,我們能看到如下結(jié)果截圖:
2. 根據(jù)phpinfo()查看PHP.ini的目錄和找到mysqli.default.port荠割、mysqli.default_socket、pdo_mysql.default_socket的所在目錄,若其目錄值不是步驟1中的/tmp/mysql.sock蔑鹦,則修改php.ini中的mysql.default_socket夺克、mysqli.default_socket、pdo_mysql.default_socket值為 /tmp/mysql.sock嚎朽。
若/etc/php.ini不存在铺纽,則復(fù)制一份:(話說我直接在php.ini.default中改了,???♂?哟忍,但看了下似乎修改項(xiàng)算正常狡门,就懶得改回去了,實(shí)話是我也記不清楚具體改了哪些東西了锅很,捂臉遁走其馏。。爆安。尝偎。)
cp /etc/php.ini.default /etc/php.ini
3. 重啟apache/php-fpm
PS:上述的這種解決方案看起來應(yīng)該不是瞎掰,而我在進(jìn)行到第二步鹏控,還沒修改ini文件default_socket信息的時(shí)候,發(fā)現(xiàn)將hostname=>127.0.0.1似乎就已連接正常了肤寝,故而這種解決方法也不算經(jīng)過了實(shí)際驗(yàn)證当辐,貼在這里,只當(dāng)給大家提供一種解決問題的思路吧鲤看。
至于為何連接地址由 localhost 改成 127.0.0.1 后正常呢缘揪?我也無甚深究,不過還是貼上大神的一段話(同樣未核驗(yàn)义桂,大家辯證地看看找筝,廖當(dāng)談資也罷)~~
“通常意義上localhost和127.0.0.1是等價(jià)的,只是mysql在處理這個(gè)名詞的問題上有一些不同慷吊,是根據(jù)不同的地址來采取的不同的通信手段袖裕。當(dāng)主機(jī)填寫為localhost時(shí)MySQL會(huì)采用 unix domain socket連接,當(dāng)主機(jī)填寫為127.0.0.1時(shí)MySQL會(huì)采用TCP/IP的方式連接溉瓶。使用Unix socket的連接比TCP/IP的連接更加快速與安全急鳄。這是MySQL連接的特性,可以參考官方文檔的說明4.2.2. Connecting to the MySQL Server堰酿〖埠辏”
“為此,解決方案如下:
1.使用TCP/IP代替Unix socket触创。即在連接的時(shí)候?qū)ocalhost換成127.0.0.1坎藐。
2. 修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路徑)哼绑。
3.直接在php建立連接的時(shí)候指定my.socket的位置(官方文檔:mysqli_connect)岩馍。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')“
ps: 這樣上下對(duì)比來看碉咆,如果我當(dāng)時(shí)未修改localhost為127.0.0.1按照上面的解決方案,指定my.socket的位置兼雄,撲騰下吟逝,似乎也是可以解決問題的。個(gè)人猜測(cè)赦肋,希望對(duì)后來者的小伙伴有幫助吧块攒。
放個(gè)彩蛋:數(shù)據(jù)庫連接的問題雖然解決了,但是a new problem comes to me: for example ,i config dev.oc server_name as my own project ,when input url=dev.oc/, it appears error page as follow;?i just guess it may be the route rules of url, next day i will confirm and solve it.
http://jingpin.jikexueyuan.com/article/47299.htm
http://blog.csdn.net/zacklin/article/details/7859680