發表文章

MySQL欄位加密工具:MyDiamo

圖片
這是一套主要針對MySQL Fork(MySQL, Percona Server, MariaDB)的欄位進行加密管理的第三方工具 它可以對欄位設定不同的加密方式,且加密、解密的權限可獨立分開設定 另外,它還支援連線管控及稽核的功能 詳細的功能就上 官網 查詢 MyDiamo運作原理 它是屬於MySQL管理層和Storage Engine層之間的一個Plugin,透過自行設定的原則來對InnoDB或MyISAM表的欄位進行加密。(如圖一) 軟體安裝好後,它有自已的管理介面,要在這個介面中先設定好【原則】,接著在此原則之下設定有哪些【欄位】要使用這個原則,再來就是設定有哪些【使用者】被授予這些欄位的權限為何,最後再執行plugin所屬的migration funcation對資料表欄位進行加密。 圖一 在安裝前要先註冊帳號,它才會把軟體下載的連結寄給你… MyDiamo安裝 在下載軟體的時候要注意,它不是全部的版本都支援的,它只支援部份小版本,例如:MySQL 5.7.12不支援…等,所以要先確認目前資料庫的版本再來下載,更多的版本內容請看官網啦: Support Platform 如果你的MySQL是用RPM方式安裝的話,遇到的問題相對會少一些 我的測試環境是以tar安裝,很多路徑是要另外做設定的(我懶沒設啦…)所以會多一些步驟 ◆安裝 [root@mysql-course D`Amo_MyDiamo_v3.0.9.4]# ./install-linux-mydiamo-3.0.9.4.run -p /opt/mysql -h 127.0.0.1 -P 3307 ===================================================== MyDiamo Install Script ===================================================== Input MySQL/MariaDB root Password : ===================================================== NDB Cluster : No DBMS : MySQL VERSION : 5.7

【工作筆記】SQL Timeout追蹤

圖片
幾個禮拜前去客戶那處理『SQL效能問題』,到場後,問題延伸為『SQL不定期發生Timeout的問題』 【客戶問題描述】 AP會建立100多個連線,且同時會將程式用幾十個連線來並行處理事務,會在不固定的時間會發生SQL Timeout的問題,由程式端無法定位是哪句SQL以及哪支程式導致的問題,在DB端也不會看到任何的錯誤訊息及警告訊息出現在Error Log中  【架構背景】 OS: CentOS 6.8, CPU 20 Cores, RAM 64G, HDD RAID 10 DB: MariaDB 10.0.1 Galera Cluster 【問題追踨】 在執行壓測過程中監控作業系統的狀態,包括CPU、RAM、IO的負載狀況 =>監控的結果CPU的load average大約在1,RAM有使用到少量的SWAP,cached的部份還有滿多可以使用,IO的負載不算太高,整體看來應該不是硬體方面造成的問題 在執行壓測過程中監控資料庫的錯誤日誌、慢查詢記錄、show processlist的狀況 =>錯誤日誌並未記錄到任何的錯誤及警告訊息,慢查詢只有其他資料庫中全表掃描的記錄,show processlist看到多數的連線均為sleep狀態,且SQL執行的時間都很短 在執行壓測過程中監控InnoDB的狀態 ------------------------ LATEST DETECTED DEADLOCK ------------------------ 2017-01-17 16:02:22 7fd7a00e6700 *** (1) TRANSACTION: TRANSACTION 755310052, ACTIVE 2 sec fetching rows mysql tables in use 1, locked 1 LOCK WAIT 6 lock struct(s), heap size 1184, 154 row lock(s) MySQL thread id 2916595, OS thread handle 0x7fdd2d9fe700, query id 213093063 192.168.3.2 tsap Sending data SELECT id, cid, time, retry FROM ss WHERE r

Percona Xtrabackup小筆記

Xtrabackup原理 Xtrabackup是基於InnoDB的crash-recovery機制來實現的,它複製InnoDB文件導致內部不一致,然後再對文件進行crash-recovery,以致於讓資料一致性並且是可用的資料庫。 完整備份 [root@mysql-course backup]# xtrabackup --user=root --password=pwd --host=127.0.0.1 \ --port=3306 --parallel=4 --compress --compress-threads=4 --target-dir=/opt/backup/full \ --backup 看到下列訊息表示備份正常完成 161109 20:48:54 Executing UNLOCK BINLOG 161109 20:48:54 Executing UNLOCK TABLES 161109 20:48:54 All tables unlocked 161109 20:48:54 [00] Streaming ib_buffer_pool to 161109 20:48:54 [00] ...done 161109 20:48:54 Backup created in directory '/opt/percona57/data' MySQL binlog position: filename 'mysql-bin.000243', position '872', GTID of the last change '4bb4a153-8312-11e6-95a9-0800278d81c7:1-691' 161109 20:48:54 [00] Streaming backup-my.cnf 161109 20:48:54 [00] ...done 161109 20:48:54 [00] Streaming xtrabackup_info 161109 20:48:54 [00] ...done xtrabackup: Transaction log of lsn (8312487) to (8312512) was copied. 1611

MySQL監控軟體MEM及PMM介紹

圖片
MySQL監控軟體: PMP(Percona Monitoring Plugin) :Percona之前的監控是以Plugin或Template的方式加載到其他的監控軟體上,他有支援Zabbix、Nagios和Cacti等3個常用的監控軟體,詳細的介紹可以參考官網: Percona Monitoring Plugins MEM(MySQL Enterprise Monitor) :官方提供的監控軟體,需購企業版才能使用此功能,可以監控DB內的狀況和InnoDB、NDB、Replication等的內容,另外還可以監控作業系統上的部份內容,例如硬碟、CPU、RAM、網路…等使用狀況,除了監控之外,還有Query Analyzer及發送告警功能,詳細的介紹參考官網: MySQL Enterprise Monitor PMM(Percona Monitoring and Management) :它是一個用於管理及監控MySQL及MongoDB效能的開源平台,它提供了對MyISAM、InnoDB、TokuDB和PXC/Glarera的監控,另外也提供了與MEM類似的Query Analytics的功能,可以檢視執行了哪些SQL指令,並對執行效能較差的語法進行優化;針對作業系統的部份也提供了硬碟、網路、CPU和RAM的監控,特別的是它提供了Context switches、Processes和interrupts的監控,Context Switches可以看到CPU上下切換文的狀況,Processes可以方便了解系統有多少程序在等待I/O,這3個是MEM沒有提供的。詳細內容參考官方: Percona Monitoring and Management 架構說明: MEM架構 MEM是由Java+Apache Tomcat+MySQL組成的監控軟體 主要安裝Service Manager(也可稱Monitor Server)它有內建一個Agent可以讓你遠端監控 或者是另外在MySQL Server上安裝Agent軟體,其差別在於能否搜集作業系統上的資訊,裝了Agent才能在作業系統上搜集資訊 而DB端的資訊會透過本機或Service Manager的Agent,連到DB裡的Performance Schema中搜集資訊,再儲存到Servi

MySQL systemd on Linux 7

過去在Linux 6系列上用tar包安裝MySQL,要設定成系統服務很簡單,只要把mysql.server放在/etc/init.d裡面即可: cp support-files/mysql.server /etc/init.d/mysqld 但在Linux 7系列中service的角色已被systemd給取代(雖然service還是能用),但要設開機自動啟動chkconfig就會有問題: [root@mysql-course support-files]# chkconfig --list mysqld Note: This output shows SysV services only and does not include native systemd services. SysV configuration data might be overridden by native systemd configuration. If you want to list systemd services use 'systemctl list-unit-files'. To see services enabled on particular target use 'systemctl list-dependencies [target]'. 所以可以的話,我還是盡量設法弄成Linux 7相容的方式比較好 看了手冊的教學:https://dev.mysql.com/doc/refman/5.7/en/server-management-using-systemd.html 實在是太高深莫測了,我功力還不到家,看不太懂阿 後來看這篇http://superuser.com/questions/384365/systemctl-enable-differs-from-systemctl-start-how的說明,試做一下: [root@mysql-course ~]# systemctl status mysqld.service mysqld.service Loaded: not-found (Reason: No such file or di

MySQL壓測軟體tpcc-mysql

安裝 直接在GitHub下載 wget https://github.com/Percona-Lab/tpcc-mysql/archive/faa06df608d8bd36d540b0fc0042fd33debbde0c.zip 或是用bazaar來下載 wget http://mirror.centos.org/centos/7/os/x86_64/Packages/bzr-2.5.1-14.el7.x86_64.rpm rpm install bzr-2.5.1-14.el7.x86_64.rpm # cd src/ # make 因為我是用tar檔安裝MySQL的,所以它在編譯過程一直會找不到相關的library  [root@mysql-course src]# make cc load.o support.o `mysql_config --libs_r` -lrt -o ../tpcc_load /usr/bin/ld: cannot find -lperconaserverclient collect2: error: ld returned 1 exit status make: *** [../tpcc_load] Error 1 爬了文說直接設定: export LD_LIBRARY_PATH=/opt/percona57/lib export C_INCLUDE_PATH=/opt/percona57/include/ export MYSQL_HOME=/opt/percona57 export PATH=$MYSQL_HOME/bin:$PATH 就可以解決,但我試了就是沒辦法,於是查了一下mysql_config裡的設定 [root@mysql-course src]# mysql_config --libs           [-L/opt/percona57/lib/mysql -lperconaserverclient -lpthread -lz -lm -lrt -lssl -lcrypto -ldl]         --libs_r         [-L/opt/percona57/lib/mysql -lperconaserverclient -lpthread

Percona TokuDB 備份

圖片
安裝備份 ps_tokudb_admin --enable-backup 執行安裝程序時,它會去檢測一些項目,但如jemalloc, transparent huge pages..等,這些是在安裝TokuDB引擎時就已設定過的,大致上不會有什麼問題。 要注意的地方是要記得在參數檔的[mysqld_safe]區塊中加入 preload-hotbackup 這個參數,否則安裝時會報錯。 執行備份 set tokudb_backup_dir='/path/to/backup_dir'; 是的,沒看錯,這個看似設定備份路徑的語法就是在執行備份 我個人是覺得有點莫名奇妙啦XDD 它會自動的幫你把資料庫中所有的檔案備份到指定的路徑中 如果你的tokudb有另外放在其他路徑下的話,也分開備份在不同目錄下,如圖所示: 還原 目前只支援用rsync或cp的方式把資料還原回來,要注意的是,還原前切記先把mysqld服務先停止。 經測試,如果是資料移失的那種部份還原的話,還是可以在mysqld服務啟動時,透過rsync的方式把資料還原回來,如下圖: 如果是整個刪除的話,則需要關機還原,然後把每個檔案都還原回去 rsync -avrP /opt/backup/08311600/mysql_data_dir/ /opt/percona57/data/ rsync -avrP /opt/backup/08311600/tokudb_data_dir/ /opt/percona57/tokudb_data/ rsync -avrP /opt/backup/08311600/tokudb_log_dir/ /opt/percona57/tokudb_log/ 如下圖: 錯誤排除 在執行備份時,有可能會發生這個錯誤訊息: ERROR 1231 (42000): Variable 'tokudb_backup_dir' can't be set to the value of '/opt/backup/08311600' 這個有可能是因為備份路徑的權限不足,或是已有檔案存在無法寫入…  可以執行:SELECT @@tokudb_backup_last_error_string;查明錯誤原因