一.mysql一些基本操作用法
1. 忘記root密碼
編輯mysql主配置文件 my.cnf 在[mysqld]字段下添加參數 skip-grant ,重啓數據庫服務,這樣就可以進入數據庫不用授權了 mysql -uroot ,修改相應用戶密碼 use mysql; update user set password=password('your password') where user='root';flush privileges; 最後修改/etc/my.cnf 去掉 skip-grant , 重啓mysql服務
2. skip-innodb 我們可以增加這個參數不使用innodb引擎。
3. 配置慢查詢日誌
#log_slow_queries = /path/to/slow_queries
#long_query_time = 1
4. mysql常用操作
查看都有哪些庫 show databases;
查看某個庫的表 use db; show tables;
查看錶的字段 desc tb;
查看建表語句 show create table tb;
當前是哪個用戶 select user();
當前庫 select database();
創建庫 create database db1;
創建表 create table t1 (`id` int(4), `name` char(40));
查看數據庫版本 select version();
查看mysql狀態 show status;
修改mysql參數 show variables like 'max_connect%'; set global max_connect_errors = 1000;
查看mysql隊列 show processlist;
創建普通用戶並授權 grant all on *.* to user1 identified by '123456';
grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
grant all on db1.* to 'user3'@'%' identified by '231222';insert into tb1 (id,name) values(1,'aming');
更改密碼 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
查詢 select count(*) from mysql.user; select * from mysql.db; select * from mysql.db where host like '10.0.%';
插入 update db1.t1 set name='aaa' where id=1;
清空表 truncate table db1.t1;
刪除表 drop table db1.t1;
刪除數據庫 drop database db1;
修復表 repair table tb1 [use frm];
5. mysql備份與恢復
備份 mysqldump -uroot -p db >1.sql
恢復 mysql -uroot -p db <1.sql
只備份一個表 mysqldump -uroot -p db tb1 > 2.sql
備份時指定字符集 mysqldump -uroot -p --default-character-set=utf8 db >1.sql
恢復也指定字符集 mysql -uroot -p --default-character-set=utf8 db < 1.sql
二.MySQL調優可以從幾個方面來做:
1. 架構層:
做從庫,實現讀寫分離;
2.系統層次:
增加內存;
給磁盤做raid0或者raid5以增加磁盤的讀寫速度;
可以重新掛載磁盤,並加上noatime參數,這樣可以減少磁盤的i/o;
3. MySQL本身調優:
(1) 如果未配置主從同步,可以把bin-log功能關閉,減少磁盤i/o
(2) 在my.cnf中加上skip-name-resolve,這樣可以避免由於解析主機名延遲造成mysql執行慢
(3) 調整幾個關鍵的buffer和cache。調整的依據,主要根據數據庫的狀態來調試。如何調優可以參考5.
4. 應用層次:
查看慢查詢日誌,根據慢查詢日誌優化程序中的SQL語句,比如增加索引
5. 調整幾個關鍵的buffer和cache
1) key_buffer_size 首先可以根據系統的內存大小設定它,大概的一個參考值:1G以下內存設定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.這個值可以通過檢查狀態值Key_read_requests和 Key_reads,可以知道key_buffer_size設置是否合理。比例key_reads / key_read_requests應該儘可能的低,至少是1:100,1:1000更好(上述狀態值可以使用SHOW STATUS LIKE ‘key_read%’獲得)。注意:該參數值設置的過大反而會是服務器整體效率降低!
2) table_open_cache 打開一個表的時候,會臨時把表裏面的數據放到這部分內存中,一般設置成1024就夠了,它的大小我們可以通過這樣的方法來衡量: 如果你發現 open_tables等於table_cache,並且opened_tables在不斷增長,那麼你就需要增加table_cache的值了(上述狀態值可以使用SHOW STATUS LIKE ‘Open%tables’獲得)。注意,不能盲目地把table_cache設置成很大的值。如果設置得太高,可能會造成文件描述符不足,從而造成性能不穩定或者連接失敗。
3) sort_buffer_size 查詢排序時所能使用的緩衝區大小,該參數對應的分配內存是每連接獨佔!如果有100個連接,那麼實際分配的總共排序緩衝區大小爲100 × 4 = 400MB。所以,對於內存在4GB左右的服務器推薦設置爲4-8M。
4) read_buffer_size 讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享!
5) join_buffer_size 聯合查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每連接獨享!
6) myisam_sort_buffer_size 這個緩衝區主要用於修復表過程中排序索引使用的內存或者是建立索引時排序索引用到的內存大小,一般4G內存給64M即可。
7) query_cache_size MySQL查詢操作緩衝區的大小,通過以下做法調整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes該參數記錄有多少條查詢因爲內存不足而被移除出查詢緩存。通過這個值,用戶可以適當的調整緩存大小。如果該值非常大,則表明經常出現緩衝不夠的情況,需要增加緩存大小;Qcache_free_memory:查詢緩存的內存大小,通過這個參數可以很清晰的知道當前系統的查詢內存是否夠用,是多了,還是不夠用,我們可以根據實際情況做出調整。一般情況下4G內存設置64M足夠了。
8) thread_cache_size 表示可以重新利用保存在緩存中線程的數,參考如下值:1G —> 8 2G —> 16 3G —> 32 >3G —> 64
除此之外,還有幾個比較關鍵的參數:
9) thread_concurrency 這個值設置爲cpu核數的2倍即可
10) wait_timeout 表示空閒的連接超時時間,默認是28800s,這個參數是和interactive_timeout一起使用的,也就是說要想讓wait_timeout 生效,必須同時設置interactive_timeout,建議他們兩個都設置爲10
11) max_connect_errors 是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。與性能並無太大關係。爲了避免一些錯誤我們一般都設置比較大,比如說10000
12) max_connections 最大的連接數,根據業務請求量適當調整,設置500足夠
13) max_user_connections 是指同一個賬號能夠同時連接到mysql服務的最大連接數。設置爲0表示不限制。通常我們設置爲100足夠