mysql一些常見命令

根據日常使用情況總結了mysql的一些常見命令

//在root用戶中,啓動mysql服務
service mysqld start

//查看啓動狀態
service mysqld status

//停止mysql服務
service mysqld stop

//切換到mysql用戶
//首先查看mysql的安裝位置,切換到安裝位置
whereis  mysql
//進入到mysql客戶端
./bin/mysql -u root -p

//查看引擎
mysql> show  engines;


//設置root用戶密碼
 set password= password('mysql');
下一次進入mysql客戶端需要輸入設置的此密碼。
 
//使用安全模式啓動mysql 服務,這個操作執行後控制檯會停住,需要用戶在另外一個shell 窗口中繼續操作
bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking --basedir=/opt/mysql-5.5.58-linux-glibc2.12-x86_64 --datadir=/opt/mysql-5.5.58-linux-glibc2.12-x86_64/data

//kill 掉安全模式的mysql服務
kill -15 $(ps -ef |grep "mysqld --basedir" | grep -v grep | awk -F ' ' '{print $2}')
 
 
//創建用戶
1、創建用戶(其中用戶名爲havi2 、 用戶密碼爲123456 、 %表示所有用戶可以連接)
mysql>create user 'havi2'@'%' identified by '123456';    // 此方法創建後可通過mysql.user查看 select user,host from mysql.user;
mysql>grant all privileges on test.* to havi2@'%' identified by '123456';  //給havi2用戶賦值test庫的所有權限,也可以只賦值select, insert, update, delete

2、增加一個用戶test1密碼爲abc,讓他可以在任何主機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MYSQL,然後鍵入以下命令:
mysql>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";  //此方法創建 ,不能使用命令行方式連接  

3、創建用戶test1 讓其所有用戶可登陸   //此方法創建最建議
mysql>grant all privileges on *.* to 'test1'@'%' identified by 'abcd' with grant option;
mysql>flush   privileges;       

//刪除用戶(刪除host爲localhost、user爲 test)
mysql>delete from mysql.user where user='test' and host='localhost';

//刪除賬戶及權限:
>drop user 用戶名@'%';
>drop user 用戶名@ localhost;

//刪除匿名用戶
select user , host from mysql.user; ← 查看用戶信息
select password , user from mysql.user;   查看用戶和密碼
delete from mysql.user where user=''; ← 刪除匿名用戶

//創建表
create table test2(name VARCHAR(20) , age int );

//查看可以訪問使用user爲root的host
mysql> select host ,user from user;
+-----------+------+
| host      | user |
+-----------+------+
| 127.0.0.1 | root |
| ::1       | root |
| localhost |      |
| localhost | root |
| sdb3      |      |
| sdb3      | root |
+-----------+------+

//賦予任何主機訪問數據庫權限(方法一)
mysql> update mysql.user set host='%' where user='root' and host='localhost';
mysql>  select host ,user from user;
+-----------+------+
| host      | user |
+-----------+------+
| %         | root |
| 127.0.0.1 | root |
| ::1       | root |
| localhost |      |
| sdb3      |      |
| sdb3      | root |
+-----------+------+


//賦予任何主機訪問數據的權限 (方法二)
1.本地操作的權限.爲避免衝突可將root用戶改爲自定義用戶
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
2.遠程操作的權限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
3.遠程操作的權限不設置密碼
mysql> GRANT   ALL   PRIVILEGES   ON   *.*   TO   'root'@'%'   WITH   GRANT   OPTION;
//接下來一定要執行這一步,不然配置不生效
mysql> FLUSH   PRIVILEGES;
mysql> exit
//重新啓動進入數據庫查看
mysql>  select host ,user from mysql.user;
+-----------+------+
| host      | user |
+-----------+------+
| %         | root |
| 127.0.0.1 | root |
| ::1       | root |
| localhost |      |
| localhost | root |
| sdb3      |      |
| sdb3      | root |
+-----------+------+


//恢復原來的配置
mysql> update mysql.user set host='localhost' where user='root' and host='%';

//導出數據sql
SELECT * from test.test into outfile '/opt/mysql-5.5.58-linux-glibc2.12-x86_64/test.csv'   fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';

//使用mysqldump工具進行導出
mysqldump -uroot -ppassword cardstore table1 table2 --fields-enclosed-by='"' --fields-terminated-by=',' --lines-terminated-by='\r\n' --tab=/mysqldump_dir

//將test這個database導出到test.sql中
./bin/mysqldump -uroot -pmysql --databases test >test.sql


SELECT
    * from test
into outfile '/opt/mysql-5.5.58-linux-glibc2.12-x86_64/test.csv'   
fields terminated by ',' optionally enclosed by '"' escaped by '"'    
lines terminated by '\r\n';


SELECT * from test.test into outfile '/opt/mysql-5.5.58-linux-glibc2.12-x86_64/test/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';


//注意執行導出時會報錯
1.執行導出報錯異常爲:
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
2.進入mysql客戶端查看其中secure-file-priv參數爲null,表示禁止導出數據。
mysql>  show global variables like '%secure%';  
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_auth      | OFF   |
| secure_file_priv | NULL  |
+------------------+-------+

3.修改/etc/my.cnf  
在[mysqld]中增加 secure_file_priv="/"

4.重啓mysqld服務
在root用戶下執行:
    service mysqld stop    
    service mysqld start
    service mysqld status
    
5、查看 show global variables like '%secure%'; 發現其參數配置已經改變
mysql> show global variables like '%secure%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| secure_auth      | OFF   |
| secure_file_priv | /     |
+------------------+-------+


mysql 用戶
-u root   -p mysql
-u test1  -p abc

 
========================================執行步驟
1、創建一個新的用戶,讓所有用戶可連接
mysql> GRANT ALL PRIVILEGES ON *.* TO 'test1'@'%' IDENTIFIED BY 'abc' WITH GRANT OPTION;
mysql> FLUSH   PRIVILEGES;

2、執行Export腳本使數據導出來
sh mysql_export.sh -h localhost -P 3306 -u test1 -p abc -d test -t test -f /opt/tools/mysql_to_sdb/

3、執行腳本,導出表結構
java -jar mysql.jar 192.168.137.131 3306 havi password test

4、執行 mysql_to_sdb 腳本
sh mysql_to_sdb.sh -i 192.168.137.131 -p 3306 -u test1 -w abc -d test  -f /opt/tools/mysql_to_sdb

-i爲地址IP
-p爲mysql的端口號
-u爲mysql用戶名
-w爲用戶名所對用的密碼
-d爲需要執行的database
-f爲執行路勁

 


---mysql使用事務
mysql使用事務的關鍵字

1.begin  //打開一個事務
2.commit //提交到數據庫
3.rollback //取消操作
4.savepoint //保存,部分取消,部分提交


---mysql創集索引
1.添加PRIMARY KEY(主鍵索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.添加UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` )
3.添加INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.添加FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)
5.添加多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )


---查看 mysql的 server id
  show variables like 'server_id';

----查看mysql的 binlog 模式
 show variables like 'binlog_format';  
 
 
 ------MySQL的binlog三種模式
 1、statement level模式

每一條會修改數據的sql都會記錄到master的bin-log中。slave在複製的時候sql進程會解析成和原來master端執行過的相同的sql來再次執行。
優點:statement level下的優點,首先就是解決了row level下的缺點,不需要記錄每一行數據的變化,減少bin-log日誌量,節約io,提高性能。因爲他只需要記錄在master上所執行的語句的細節,以及執行語句時候的上下文的信息。
缺點:由於它是記錄的執行語句,所以爲了讓這些語句在slave端也能正確執行,那麼他還必須記錄每條語句在執行的時候的一些相關信息,也就是上下文信息,以保證所有語句在slave端被執行的時候能夠得到和在master端執行時候相同的結果。另外就是,由於mysql現在發展比較快,很多的新功能加入,使mysql的複製遇到了不小的挑戰,自然複製的時候涉及到越複雜的內容,bug也就越容易出現。在statement level下,目前已經發現的就有不少情況會造成mysql的複製問題,主要是修改數據的時候使用了某些特定的函數或者功能的時候會出現,比如sleep()在有些版本就不能正確複製。
 

2、rowlevel模式

日誌中會記錄成每一行數據被修改的形式,然後在slave端再對相同的數據進行修改
優點:bin-log中可以不記錄執行的sql語句的上下文相關的信息,僅僅只需要記錄那一條記錄被修改了,修改成什麼樣了。所以row level的日誌的內容會非常清楚的記錄下每一行數據修改的細節。而且不會出現某些特定情況下的存儲過程,或function,以及trigger的調用和觸發無法被正確複製的問題。
缺點:row level下,所有的執行的語句當記錄到日誌中的時候,都將以每行記錄的修改記錄,這樣可能會產生大量的日誌內容,比如有這樣一條update語句:update product set owner_member_id='d' where owner_member_id='a',執行之後,日誌中記錄的不是這條update語句所對應的事件(mysql是以事件的形式來記錄bin-log日誌),而是這條語句所更新的每一條記錄的變化情況,這樣就記錄成很多條記錄被更新的很多事件。自然,bin-log日誌的量會很大。


3、mixed模式
實際上就是前兩種模式的結合,在mixed模式下,mysql會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,也就是在statement和row之間選一種。新版本中的statement level還是和以前一樣,僅僅記錄執行的語句。而新版本的mysql中對row level模式被做了優化,並不是所有的修改都會以row level來記錄,像遇到表結構變更的時候就會以statement模式來記錄,如果sql語句確實就是update或者delete 等修改數據的語句,那麼還是會記錄所有行的變更。
 

 

 

 

 

 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章