存檔

‘mysql’ 分類的存檔

mysql忘記root密碼修改辦法

2019年2月7日 沒有評論
分類: 未分類 標簽:

mysql審計功能安裝使用

2018年3月21日 1 條評論

鸿运彩票app www.chqvd.icu mysql社區版沒有審計功能,企業版有審計功能,但是需要付費。

社區版可以使用mcafee開發的審計功能插件libaudit_plugin.so,這個插件可以用在mysql 5.1以后的版本,使用時請下載對應的版本。

https://bintray.com/mcafee/mysql-audit-plugin/release#files

解壓拷貝libaudit_plugin.so到mysql的插件目錄:

查看MySQL的插件目錄:

復制庫文件到MySQL庫目錄下:

# cp audit-plugin-mysql-5.7-1.1.4-725/lib/libaudit_plugin.so /usr/local/mysql/lib/plugin/
# chmod a+x libaudit_plugin.so

進入mysql命令窗口,安裝插件:

> install plugin audit soname 'libaudit_plugin.so';
Query OK, 0 rows affected (0.06 sec)
查看mysql當前已經加載了哪些插件:

查看版本:

開啟Audit功能:

> SET GLOBAL audit_json_file=ON;
Query OK, 0 rows affected (0.00 sec)
執行任何語句(默認會記錄任何語句,有語法錯誤的不會記錄),然后去mysql數據目錄查看mysql-audit.json文件(默認為該文件)。

插入一些數據,查看一下mysql-audit.json文件信息(json格式),如下:

復制代碼

可以查看插件有哪些可配置的參數:

mysql> SHOW GLOBAL VARIABLES LIKE '%audi%';

其中我們需要關注的參數有:

1. audit_json_file

是否開啟audit功能(0為關閉)。

2. audit_json_log_file

記錄文件的路徑和名稱信息(默認放在mysql數據目錄下.json文件)。

3. audit_record_cmds

audit記錄的命令,默認為記錄所有命令??梢隕柚夢我鈊ml、dcl、ddl的組合。如:audit_record_cmds=select,insert,delete,update?;箍梢栽諳呱柚胹et global audit_record_cmds=NULL。(表示記錄所有命令)

4. audit_record_objs

audit記錄操作的對象,默認為記錄所有對象( 審計哪些數據庫),可以用SET GLOBAL audit_record_objs=NULL設置為默認。也可以指定為下面的格式:audit_record_objs=,test.*,mysql.*,information_schema.*。

5. audit_whitelist_users

用戶白名單。

詳細的參數說明,可以直接訪問官方說明:

https://github.com/mcafee/mysql-audit/wiki/Configuration

最后為了保證重啟數據庫,配置不丟失,修改my.cnf 配置文件,將下面的配置添加到[mysqld]中,所以在配置文件中my.cnf加入參數:

audit_json_file=on #保證mysql重啟后自動啟動插件
plugin-load=AUDIT=libaudit_plugin.so #防止刪除了插件,重啟后又會加載
audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate' #要記錄哪些命令語句,因為默認記錄所有操作;
保存重啟即可看到效果。

mysql審計插件卸載

直接執行 UNINSTALL PLUGIN AUDIT 卸載會報錯:

需要在 my.cnf 中 [mysqld] 下添加 audit_uninstall_plugin=1,重啟mysql。重啟完畢后執行兩次 UNINSTALL PLUGIN AUDIT; 即可卸載。

卸載完成后需要從 my.cnf 中刪除 audit_uninstall_plugin=1 ,否則下次mysql啟動會報錯:[ERROR] /data/mysql/bin/mysqld: unknown variable 'audit_uninstall_plugin=1'

分類: 未分類 標簽:

一個關于分頁的面試題

2015年5月1日 5 條評論

在網上看到面試中考分頁的帖子,結合自己的想法,集合一下,歡迎討論。

分頁是各式各樣系統開發過程中必不可少的環節,普通web應用數據量小、訪問量小,分頁可以用簡單的方式來實現,一般是通過startrow+pagenum來實現,甚至可以提前生成靜態頁面,這樣數據庫基本沒有壓力,缺點是數據變動時要重新生成所有列表頁,而且不能實時顯示數據的變化。

不過還好的是對于大多數的應用能夠實現需求即可,不必過多考慮優化。

互聯網公司的海量數據,情況就變得不一樣了,更多考慮的是性能和效率,加載速度提高一點點,就意味著用戶體驗的提升,用戶體驗決定著產品的未來。

因此我們可以看到數據量變大的情況下一個高效的分頁變的重要程度,分頁面試能夠體現面試者是否處理過大量數據,沒處理過也能夠體現其面試時處理問題的思考和應變能力。

不管什么方法做分頁,它都離不開數據庫的支持,優化原則是盡量減少掃描數據庫中記錄的條數。

常用的關系數據庫mysql和oracle為例:mysql分頁依賴于limit,oracle分頁使用rownum實現。

mysql分頁方法?

mysql分頁的核心語句:

先看一下分頁的基本原理(CSDN那個百萬級數據庫來測試?。?/p>

SELECT * FROM csdn ORDER BY id DESC LIMIT 100000,2000;
耗時: 0.813ms

分析:對上面的mysql語句說明:limit 100000,2000的意思掃描滿足條件的102000行,扔掉前面的100000行,返回最后的2000行。

問題就在這里,如果是limit 100000,20000,需要掃描120000行,在一個高并發的應用里,每次查詢需要掃描超過100000行,性能肯定大打折扣。

在《efficient pagination using mysql》中提出的clue方式。

利用clue方法,給翻頁提供一些線索,比如還是SELECT * FROM csdn order by id desc,按id降序分頁,每頁2000條,當前是第50頁,當前頁條目id最大的是102000,最小的是100000。如果我們只提供上一頁、下一頁這樣的跳轉(不提供到第N頁的跳轉)。

那么在處理上一頁的時候SQL語句可以是:
SELECT * FROM csdn WHERE id<=102000 ORDER BY id DESC LIMIT 2000; #上一頁 耗時:0.015ms 處理下一頁的時候SQL語句可以是: SELECT * FROM csdn WHERE id>102000 ORDER BY id ASC LIMIT 2000; #下一頁
耗時:0.015ms

這樣,不管翻多少頁,每次查詢只掃描20行。效率大大提高了!

但是,這樣分頁的缺點是只能提供上一頁、下一頁的鏈接形式。

oracle如何分頁?

oracle分頁的核心:

大量數據時oracle分頁語句的優化(通過rownum和rowid來進行分頁),如下:

分類: 未分類 標簽:

mysql-bin文件

2014年11月9日 沒有評論

mysql的數據存放目錄var下有很多文件
-rw-r----- 1 root root 296208 Nov 8 21:51 mysql-bin.000051
-rw-r----- 1 root root 92588461 Nov 8 21:51 mysql-bin.000050
-rw-r----- 1 root root 1331729 Nov 8 21:51 mysql-bin.000061
-rw-r----- 1 root root 4736 Nov 8 21:51 mysql-bin.000060
-rw-r----- 1 root root 5231 Nov 8 21:51 mysql-bin.000059
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000058
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000057
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000056
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000055
-rw-r----- 1 root root 125 Nov 8 21:51 mysql-bin.000054
-rw-r----- 1 root root 12670376 Nov 8 21:51 mysql-bin.000053
-rw-r----- 1 root root 9118273 Nov 8 21:51 mysql-bin.000052
導致磁盤空間很快用完,對于小硬盤的vps來說很快就耗盡了vps空間。

這些文件是mysql的日志文件,用來實現主從復制的或者數據恢復的。
對于單機的vps不需要主從復制,我們可以關閉這個功能

1.編輯my.cnf
注釋掉
#log-bin=mysql-bin
2.登陸到mysql管理界面,執行reset master刪除這些文件
#mysql -u root -p
mysql> reset master;

----------------------

1:只有一個mysql服務器,那么可以簡單的注釋掉這個選項就行了。
vi /etc/my.cnf把里面的log-bin這一行注釋掉,重啟mysql服務即可。
2:如果你的環境是主從服務器,那么就需要做以下操作了。
A:在每個從屬服務器上,使用SHOW SLAVE STATUS來檢查它正在讀取哪個日志。
B:使用SHOW MASTER LOGS獲得主服務器上的一系列日志。
C:在所有的從屬服務器中判定最早的日志,這個是目標日志,如果所有的從屬服務器是更新的,就是清單上的最后一個日志。
D:清理所有的日志,但是不包括目標日志,因為從服務器還要跟它同步。
清理日志方法為:
PURGE MASTER LOGS TO 'mysql-bin.010';
PURGE MASTER LOGS BEFORE '2008-12-19 21:00:00';

分類: 未分類 標簽:

mysql多列索引和最左前綴

2014年4月12日 沒有評論

數據庫的索引可以加快查詢速度,原因是索引使用特定的數據結構(B-Tree)對特定的列額外組織存放,加快存儲引擎(索引是存儲引擎實現)查找記錄的速度。
索引優化是數據庫優化的最重要手段。

如果查詢語句使用索引(通常是where條件匹配索引)就會利用樹的結構加快查找,索引會按值查找到要查找的行在表中位置,不需回表查詢數據的就是聚簇索引(索引和數據存放在一起)。通常是需要回表再查數據,需要消耗額外的磁盤IO。所以有些時候(如按順序讀取數據)全表掃描會比使用索引快的原因就在于此。

查詢條件只有一個字段時,在該字段建立索引即可,可優化的地方是對于text blob字段使用前綴索引。

當查詢條件有多個字段時,單列索引和多列索引有很大的區別。如果使用多列索引,where條件中字段的順序非常重要,需要滿足最左前綴列。最左前綴:查詢條件中的所有字段需要從左邊起按順序出現在多列索引中,查詢條件的字段數要小于等于多列索引的字段數,中間字段不能存在范圍查詢的字段(<,like等),這樣的sql可以使用該多列索引。 mysql多列索引適合的場景

  1. 全字段匹配
  2. 匹配部分最左前綴
  3. 匹配第一列
  4. 匹配第一列范圍查詢(可用用like a%,但不能使用like %b)
  5. 精確匹配某一列和和范圍匹配另外一列

order by操作中出現的字段同樣適用于按值查找的規則,where+order by中出現的字段需可以建立滿足如上五種規則的多列索引。

使用多列需要按照最左索引列查找;不能跳過中間列;如果某一列是范圍查詢,那么其右邊所有列無法使用索引。

IN什么情況下是范圍查詢,什么情況下是多個等值查詢?如果有order by排序時,多個等于條件查詢就是范圍查詢,沒有order by排序就沒有限制。

例如,建立多列索引(name, age, id),

只能使用索引的前兩列。in是范圍查詢
... where name='www.chqvd.icu' and age in(15,16,17) order by id

可以使用整個索引,in是按值查詢
... where name='www.chqvd.icu' and age in(15,16,17) and id ='3'

分類: 未分類 標簽:

使用另一個files的count結果update一個字段的值

2014年2月6日 沒有評論

UPDATE typecho_metas tb1 set count = (SELECT COUNT(*) FROM typecho_relationships WHERE mid=tbl1.mid)

分類: 未分類 標簽:

linux編譯安裝mysql

2013年6月14日 10 條評論

緊接著上文,這次是重裝mysql,正好之前有人要lnmp的安裝方法,算上這篇文章就全了。
安裝前準備

如果mysql用戶不存在,那么添加mysql用戶

mysql編譯安裝

到此mysql就安裝到了/usr/local/mysql路徑下,下面開始mysql的配置工作
------------------------------------

安裝mysql選項文件

mysql設置開機自啟動

配置權限表

啟動mysql

這一步可能會報錯
/etc/init.d/mysqld: line 260: my_print_defaults: command not found
/etc/init.d/mysqld: line 263: my_print_defaults: command not found
/etc/init.d/mysqld: line 270: @[email protected]: command not found
/etc/init.d/mysqld: line 279: @[email protected]: command not found
/etc/init.d/mysqld: line 292: cd: @[email protected]: No such file or directory
Starting MySQLCouldn't find MySQL manager (@[email protected]/mysqlmanager) or server (@[email protected]/mysqld_safe) [FAILED]

因為路徑沒有設置,請重啟確認上面配置工作是否都完成,一般是configure后沒有make和make install。

mysql初始化配置:

mysql如何導入舊的數據:
直接拷貝數據庫文件夾到數據目錄下然后執行

==================================================================
mysql安裝過程中問題

1.
make[2]: Entering directory /down/webinstall/mysql-5.1.57/mysql-test
make[3]: Entering directory
/down/webinstall/mysql-5.1.57/mysql-test
make[3]: Nothing to be done for install-exec-am.
make INSTALL_TO_DIR="/usr/local/mysql/mysql-test" install_test_files
make[4]: Entering directory
/down/webinstall/mysql-5.1.57/mysql-test
時間較長
MYSQL安裝到這里卡了很久,可能以為出錯了,實際上MYSQL已經安裝成功了,它這步過段時間就會好了,是mysql在自我編譯測試造成的。

2.checking for termcap functions library... configure: error: No curses/termcap library found
yum install ncurses ncurses-devel

3.Starting MySQL.Manager of pid-file quit without updating fi[FAILED]

啟動數據庫之前,需要先配置權限表,其中/usr/local/mysql為mysql的安裝目錄
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/bin/mysql_install_db --user=mysql

分類: 未分類 標簽:

mysql啟動不了

2013年4月28日 1 條評論

早上訪問鸿运彩票app www.chqvd.icu,頁面提示

“建立數據庫連接時出錯”

機器環境跑的是nginx+php-fpm+mysql、出問題之前也沒做過停止mysql進程的操作。

突然間數據庫連接出錯,

開始以為php的問題,那么我在命令行直接訪問mysql

出現錯誤提示

閱讀全文...

分類: 未分類 標簽:

mysql Table 'xx' is read only

2013年4月9日 沒有評論

更換服務器環境的時候如果數據庫是直接拷貝數據庫文件夾過來,需要做兩件事情。

其中/usr/local/lnmp/mysql/是mysql的安裝路徑:

重啟mysql,數據庫就可以使用。

因為數據庫的權限是啟動時加載的需要重新啟動才行。

分類: 未分類 標簽:

ERROR 2003 (HY000): Can't connect to MySQL server on 'www.neihanji.com' (111)

2012年11月12日 沒有評論

從一臺服務器去連接另一臺服務器的mysql提示如下錯誤

ERROR 2003 (HY000): Can't connect to MySQL server on '鸿运彩票app www.chqvd.icu' (111)

注釋掉/etc/mysql/my.conf中以下兩條

#skip-networking
#bind-address = 127.0.0.1

重啟mysql服務
service mysql restart

分類: 未分類 標簽:
1分快三计划软件手机版 北京塞车计划 彩名堂计划软件最新版本苹果版 重庆时时彩后一稳赚 黑马全人工计划网页版 重庆时时官网下载 排列五小凯机器人软件 广东时时11选五胆拖 乐翻二人麻将app下载 押大小最好的倍投方法 重庆老时时开奖 篮球投注比例 功夫时时计划软件免费版 麻将规则怎么算胡 彩票如何双向刷流水 90足球比分网