說來慚愧,雖計算機專業(yè)出身,了解些Linux命令,但從未熟練使用過linux操作系統(tǒng)。今入手了Mac,簡單整理下OS系統(tǒng)下Mysql常用命令。
導(dǎo)出數(shù)據(jù)
前文說到,吾僅是為了dump一份測試數(shù)據(jù)到本地環(huán)境,以擺脫數(shù)據(jù)庫連接 IP白名單,那么我們就具體dump數(shù)據(jù)庫的過程為由,說明下具體牽涉的常用MySQL命令。
1.導(dǎo)出數(shù)據(jù)庫(表)
導(dǎo)出整個數(shù)據(jù)庫
mysqldump -u 用戶名 -p --default-character-set=latin1 數(shù)據(jù)庫名 > 導(dǎo)出的文件名(數(shù)據(jù)庫默認編碼是latin1)
such as : mysqldump -u root -p operate > operate.sql
導(dǎo)出一個表
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在每個create語句之前增加一個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)連接某個數(shù)據(jù)庫
tips: 視為常用且基礎(chǔ)的命令,此處簡單一筆帶過。
新建表
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 < 表達式 > [limit 0,2]
delete from 表名 where 表達式
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)
比如新建一個testuser用戶賬號可以訪問,即連接到數(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;
連接到遠程主機上的Mysql
mysql -h ip地址 -u root -p?
至此,Mysql常用命令的介紹暫告一段落,由于默認大家具有一定的Mysql基礎(chǔ),我們只是做了簡單梳理匯總,沒有面面俱到(比如group by, having count, order by等并未提及)。下面貼上鄙人的一段真實經(jīng)歷,希望對遇到類似問題的小伙伴的有一定的幫助,或者僅以鄙人之愚蠢博君一樂~~??
話說回到初心,dump一份測試環(huán)境數(shù)據(jù)到本地以擺脫數(shù)據(jù)庫IP白名單的限制,進而便于本地的開發(fā)測試。
經(jīng)由source命令將dunmp出的.sql文件在本地執(zhí)行后,我們本地終于具有了和測試環(huán)境基本一致的表結(jié)構(gòu)和數(shù)據(jù)。下一步就是要修改配置文件,數(shù)據(jù)庫連接從遠程測試庫修改到本地。偶們用的是CI框架,直接在config文件夾下修改database.php文件即可:添加一個active_group,并配置相關(guān)db信息,大致情況如下截圖:
一開始,我將hostname='localhost:3306'(鄙人印象中l(wèi)ocalhost與127.0.0.1基本等價撒),然餓。。。頁面錯誤信息:"?Warning: mysqli::real_connect(): (HY000/2002).......refused:",一臉懵逼,不要方,?錯誤我們見到的還少嗎,不要大驚小怪,冷靜下來~~~
先查看了下mysql.server status: running OK,那么問題來了:既然被連接方活得好好的,那連接refused??,只能是連接方打開的方式或姿勢不對誒。。。
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中改了,???♂?,但看了下似乎修改項算正常,就懶得改回去了,實話是我也記不清楚具體改了哪些東西了,捂臉遁走。。。。)
cp /etc/php.ini.default /etc/php.ini
3. 重啟apache/php-fpm
PS:上述的這種解決方案看起來應(yīng)該不是瞎掰,而我在進行到第二步,還沒修改ini文件default_socket信息的時候,發(fā)現(xiàn)將hostname=>127.0.0.1似乎就已連接正常了,故而這種解決方法也不算經(jīng)過了實際驗證,貼在這里,只當(dāng)給大家提供一種解決問題的思路吧。
至于為何連接地址由 localhost 改成 127.0.0.1 后正常呢?我也無甚深究,不過還是貼上大神的一段話(同樣未核驗,大家辯證地看看,廖當(dāng)談資也罷)~~
“通常意義上localhost和127.0.0.1是等價的,只是mysql在處理這個名詞的問題上有一些不同,是根據(jù)不同的地址來采取的不同的通信手段。當(dāng)主機填寫為localhost時MySQL會采用 unix domain socket連接,當(dāng)主機填寫為127.0.0.1時MySQL會采用TCP/IP的方式連接。使用Unix socket的連接比TCP/IP的連接更加快速與安全。這是MySQL連接的特性,可以參考官方文檔的說明4.2.2. Connecting to the MySQL Server。”
“為此,解決方案如下:
1.使用TCP/IP代替Unix socket。即在連接的時候?qū)ocalhost換成127.0.0.1。
2. 修改MySQL的配置文件my.cnf,指定mysql.socket的位置:
/var/lib/mysql/mysql.sock (你的mysql.socket路徑)。
3.直接在php建立連接的時候指定my.socket的位置(官方文檔:mysqli_connect)。比如:
$db = new MySQLi('localhost', 'root', 'root', 'my_db', '3306', '/var/run/mysqld/mysqld.sock')“
ps: 這樣上下對比來看,如果我當(dāng)時未修改localhost為127.0.0.1按照上面的解決方案,指定my.socket的位置,撲騰下,似乎也是可以解決問題的。個人猜測,希望對后來者的小伙伴有幫助吧。
放個彩蛋:數(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