mysql的基礎操做命令

命令的總結:ss、killall、kill、pkillmysql


關閉數據庫方法:linux

mysqladmin -uroot -pPassword shutdownweb

/etc/inti.d/mysqld stopsql

kill -USR2 $(cat path/pid)數據庫


更改mysql數據登陸提示符的方法:vim

1.mysql> prompt \u@swolice \r:\m\s->安全

  PROMPT set to '\u@swolice \r:\m\s->'bash

  system@swolice 10:41:22->服務器

2.vim my.cnfide

  [mysql]

  prompt=\\u@swolice \\r:\\m:\\s->


使用mysql的help,太厲害了吧。。。



設置root密碼:

mysqladmin -uroot password 'setpassword'

更改密碼:

mysqladmin -uroot -p'oldpassword' password 'newpassword' -S /data/3306/mysql.sock

適合忘記root密碼的密碼更改:--skip-grant-tables

mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables &

mysqld_safe --skip-grant-tables --user=mysql &

update mysql.user set password=password('newpassword') where user='root' and host='localhost';

flush privileges;

沒有root密碼:

mysql> set password=password('setpassword');

mysql> flush privileges;



SQL語句的使用:

DQL(數據查詢語言)、DML(數據操縱語言)、TPL(事務處理語言)、DCL(數據控制語言)、DDL(數據定義語言)、CCL(指針控制語言)

DQL: select

DML: insert , update , delete

TPL: begin , transaction , commit , rollback

DCL: grant , revoke

DDL: create , drop 

CCL: declare cursor, fetch into, update where current


select database();

select user();


drop刪除不了的時候使用delete刪除,通常指用戶。


建立用戶並受權:

grant all privileges on dbname.* to username@localhost identified by 'password';

flush privileges;


查看用戶權限:

show grant for username@hostname;


收回用戶權限:

revoke insert on dbname.* from username@hostname;



生產環境的用戶受權:

一、blog、CMS:

安裝期間須要select, insert, update, delete, create, drop。安裝完成後收回create和drop。

常規狀況下:select, insert update, delete.


二、bbs,discuz:

都須要select, insert, update, delete, create, drop


對於主從的受權:

主庫(寫爲主讀爲輔):

本機:lnmp,lamp

grant all privileges on blog.* to 'blog'@'localhost' identified by 'blog';

應用服務器和數據庫服務器不在一個主機上的受權:

grant all privileges on 'blog'.* to 'blog'@'hostname' identified by 'blog';

嚴格的受權:重視安全,忽略方便:

grant select, insert, update, delete on 'blog'.* to 'blog'@'hostname' identified by 'blog';

從庫(只讀):

grant select on 'blog'.* to 'blog'@'hostname' identified by 'blog';


主從高級受權策略:

第一種:

寫庫:blog   password:password   port:3306    hostname:10.0.0.x

讀庫:blog   password: password   port: 3306    hostname: 10.0.0.x

第二種:

寫庫:blog_w password: password   port: 3306    hostname: 10.0.0.x

讀庫:blog_r password: password   port: 3306    hostname: 10.0.0.x

受權的具體命令:

主庫:

grant select, insert, update, delete on 'blog'.* to 'blog'@'10.0.0.x' identified by 'blog';

從庫:

grant select on 'blog'.* to 'blog'@'10.0.0.x' identified by 'blog';

從庫除了作select外,還能夠加read-only參數,嚴格控制web用戶寫從庫。


主從庫的mysql庫和表是同步的,沒法針對同一個用戶受權不一樣的權限。由於,主庫受權後會自動同步到從庫上,致使從庫的受權只讀失敗。

resolve funciton:

1.取消mysql庫的同步。

2.受權主庫權限後,從庫執行收回增刪改。

3.不在受權上控制增刪改,而是用read-only參數,控制普通用戶更新從庫,注意,read-only參數對超級用戶無效。


查看mysql用戶受權:

show grant for 'username'@'hostname';


數據表的操做:

create table tname(

field type,

field type,

field type);


爲表的字段建立索引:

create table tname(

field type auto_increment,

field type,

field type

primary key(id),

key index_name(name)

);


刪除主鍵:

alter table tname drop primary key;

增長主鍵:

alter table tname change id id int primary key auto_increment;


刪除索引:

alter table student drop index index_name;

在某列上添加索引:

alter table tname add index index_name(name);

對字段的前n個字符建立普通索引:

create index index_name on tname(col_name(8));


對錶的多個字段建立聯合索引:

create index index_name on tname(col_name1, col_name2);

show index form tname\G

刪除索引:

drop index index_nanme on tname;

對錶的多個字段的前n個字符列建立聯合索引:

create index index_name on tname(col_name1(8), col_name2(10));

按條件列查詢時,聯合索引是有前綴生效特性的。

index(a,b,c)僅a, ab, abc三個查詢條件列表能夠走索引。b, bc, ac, c等沒法走索引。


建立惟一非主鍵索引:

create unique index index_name on tname(col_name);


小表無需創建索引,寫頻繁,讀少的業務要少創建索引。

select user,host from mysql.user where host=....索引必定要建立在條件列,而不是select後的選擇數據的列,另外咱們要儘可能選擇在惟一值多的大表上創建索引。



建立主鍵索引:

alter table tname change id id int primary key auto_increment;

刪除主鍵索引:

alter table tname drop primary key;

建立普通索引:

alter table tname add index index_name(col_name(8));

create index index on tname(col_name(8));

create index index_name on tname(col_name1, col_name2);

刪除普通索引:

alter table tname drop index index_name;


alter和create的幫助相關

help alter table;



插入數據:

insert into tname (col1, col2...) values (value1, value2...);


查詢select語句的執行計劃:

explain select * from tname;

help explain

手冊須要掌握: 5, 6, 7, 8, 10, 11, 13, 14, 15


查看mysql二進制日誌使用mysqlbinlog命令查看二進制日誌文件。二進制日誌文件只記錄更改,不記錄查詢。

# mysqlbinlog mysql-bin.log


使用二進制日誌恢復數據的思路及方法:

首先使用數據庫的全備份,恢復到全備份的那個時候的數據,而後再使用二進制日誌恢復從全備份到數據出錯的時間段的數據。命令以下:

mysql -uroot -proot dbname < /path/to/dbname.sql

mysqlbinlog mysql-bin.000001 > mysql-bin.sql

在mysql.sql文件中找到相關出錯時間的出錯語句,刪除之。在恢復到dbname中便可

mysql -uroot -proot dbnmae < /path/to/mysql-bin.sql

恢復完成。


防止mysql的誤操做:使用mysql -U的命令登陸。


刪除表數據:

delete from tname;表中的數據一條一條刪除。


truncate table tname;先drop掉整個表,而後從新建立該表。(效率高)


增刪改表的列(field):

alter table tname add/change.......


更改表名:

rename table old_tname to new_tname;


sql語句重點:建庫、建表、索引、列



解決mysql亂碼的5種方法:

1.登陸mysql後執行:set names utf8;

2.在sql文件中指定:set names utf8; 登陸mysql執行:source dbname.sql

3.在sql文件中指定:set names utf8; 使用mysql導入:mysql -uroot -proot dbname < dbname.sql

mysql -uroot -proot -e "set names utf8; select * from dbname.tname;"

4.經過mysql導入指定字符集:mysql -uroot -proot --default-character-set=utf8 dbname < dbname.sql

5.修改配置文件:vim my.cnf

[client]

default-character-set=utf8

[mysqld]

default-character-set=utf8 5.1版本

character-set-server=utf8 5.5版本


linux,客戶端,服務端,庫,表,程序,使用同一字符集。



show variables;

show global status;


set global key_buffer_size=

show vairables like 'key_buffer%';


my.cnf 加 key_buffer_size=

mysql -e


mysqldump, mysqlbinlog, mysql, mysqladmin


修改mysql數據庫表的字符集:

alter database character set * 

alter table tname character set * 

對已有的數據表不能修改,只能修改新建立的。


對已有的數據表的字符集修改,須要導出數據,修改字符集後從新導入便可:

alter database dbname character set utf8;



1.導出表結構:

mysqldump -uroot -p --default-character-set=gbk -d dbname > dbname.alltable.sql

--default-character-set=gbk表示用gbk鏈接,-d只導出表結構。

2.編輯dbname.sql將原字符集改爲如今的字符集

3.確保數據庫再也不更新,導出全部數據

mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 dbname > alldata.sql

--quick:用於轉儲大的表,強制mysqldump從服務器一次一行的檢索數據而不是檢索全部行,並輸出前cache到內存中。

--no-create-info:不建立create table語句。

--extended-insert:使用包括幾個values列表的多行insert語法,這樣文件更小,IO也小,導入數據時會更快。

--default-character-set=utf8:按照原有字符集導出數據,這樣導出的文件中,全部中文到時可見的,不會保存成亂碼。

4.編輯alldata.sql將set names utf8改爲gbk

5.建庫

create database dbname default charset gbk;

6.建立表,執行dbname.alltable.sql

mysql -uroot -proot dbname < dbname.alltable.sql

7.導入數據:

mysql -uroot -proot dbname < alldata.sql


使用mysqldump備份全部的數據庫的命令:

mysql -uroot -proot -e "show databases;" | grep -Evi "database|infor|perfor" | sed -r 's#^([a-z].*$)#mysqldump -uroot -proot -B \1|gzip >/opt/\1.sql.gz#g' | bash

相關文章
相關標籤/搜索