星期六, 7月 13, 2019

AWS RDS Aurora MySQL 調整 slow_query_log 小記

AWS RDS Aurora MySQL 調整 slow_query_log 小記

因為同事提出要啟用 slow_query_log 功能, 所以寫了一篇小記紀錄一下

DB: Amazon Aurora MySQL 5.7-compatible ( 5.7.12 )

Aurora DB 的建立過程非常的簡單
  • 選取 DB Engine / DB 名稱 / 管理者名稱 / 管理者密碼
  • 其他按照預設值就可以建立 DB
  • 預設沒有 Public Access 可以按照需求調整, 但是有趣的是, 縱使沒有選取 Public Access, AWS 還是會在 EC2 的 Security Group 內默默的幫你建立一個 Security Group 讓你日後方便連線

建立起來之後預設是兩個 instances, 一個是 Writer 另外一個是 Reader



在 AWS RDS 如果要變更相關設定, 是透過 Parameter groups 來進行
  • DB cluster parameter group
    • 針對整個 Cluster 來設定, 產生新的 Reader 的時候, 會套用相關設定
  • DB parameter group
    • 單一 instance 套用的設定
  • 如果 RDS 發現 DB cluster parameter group 與 某一個 instance 的設定有衝突, 會在 Recommendations 內提醒

建立 Aurora 之後
  • DB cluster parameter group 是套用預設的 default.aurora-mysql5.7
  • 單一 instance 的 Parameter group 也是套用預設的 default.aurora-mysql5.

那要如何確認相關設定有啟用呢
  • 沒有 Public access, 從該 Region 內的 EC2 來進行連線
  • 有 Public access, 使用剛剛建立的 Security Group 或是建立 Security Group 使用 mysql client 指令連線

建立連線的方式可以參考官方網頁

連線方式大概如下

> mysql -h test20190713-test-pg2.ccfftpkkx3dr.us-east-2.rds.amazonaws.com -P 3306 -u root -p

Enter password: 輸入DB密碼

查詢相關設定
> SHOW  VARIABLES  like '%slow_query_log%';

+---------------------+----------------------------------------------+
| Variable_name       | Value                         |
+---------------------+----------------------------------------------+
| slow_query_log      | OFF                                          |
| slow_query_log_file | /rdsdbdata/log/slowquery/mysql-slowquery.log |
+---------------------+----------------------------------------------+
2 rows in set (0.33 sec)

> SHOW VARIABLES like '%long_q%';
+-----------------+-----------+
| Variable_name   | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.42 sec)

> SHOW VARIABLES like '%log_quer%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set (0.26 sec)



接下來就是要建立 Parameter group 來套用設定, 此次會有幾個相關設定
  • slow_query_log
    • 是否啟用 slow_query_log , 也就是針對查詢的時間過長( slow ) 來紀錄 log
  • long_query_time
    • 定義 long_query_time , 查詢超過多少秒, 就列入紀錄, RDS 預設是 10 秒
  • log_queries_not_using_indexes
    • 是否啟用 log_queries_not_using_indexes, 也就是如果查詢沒有使用 index 也要紀錄

這次只要針對其中一個 instance 來設定, 所以我會使用 DB parameter group ( 單一 instance )方式, 後面也會把我整理的邏輯列出

建立新的 Parameter group

點選左方的 Parameter groups -- > Create parameter group


  • 建立方式只要選取 group family 還有 Type ( cluster or not ), 輸入名稱還有敘述就可以建立


建立完成之後要來將剛剛想要修改的參數放進去
點選剛剛建立的 Parameter Group

在搜尋的欄位輸入關鍵字
勾選參數



點選 Edit parameters
下拉式選單 選取要使用的 value  -- > Save changes


使用同樣的方式去設定
  • long_query_time = 10
  • log_queries_not_using_indexes =1


接下來要套用到 instance 上面
回到  Databases
點選要套用的 instance -- > Modify

在 Database options 內的 DB parameter group 選取剛剛建立的 parameter group

點選 Continue

選取要套用的時間點 -- > Modify DB Instances

不同的設定可能會關係到要不要重開機才能生效, 那要如何觀察呢?

可以在該 instance 的 configuration 內觀察
如果是要重開機才能生效, 會看到 pending-reboot 這樣的字眼

那就 使用 Actions -- > Reboot 來讓他生效吧
( 如果是 Production 環境, 請用架構的方式或是協調停機來避免事故 )


再次連線到 instance 來觀察

> mysql -h test20190713-test-pg2.ccfftpkkx3dr.us-east-2.rds.amazonaws.com -P 3306 -u root -p

Enter password: 輸入DB密碼

查詢相關設定
> SHOW  VARIABLES  like '%slow_query_log%';

+---------------------+----------------------------------------------+
| Variable_name       | Value                         |
+---------------------+----------------------------------------------+
| slow_query_log      | ON                                          |
| slow_query_log_file | /rdsdbdata/log/slowquery/mysql-slowquery.log |
+---------------------+----------------------------------------------+
2 rows in set (0.33 sec)

> SHOW VARIABLES like '%long_q%';
+-----------------+-----------+
| Variable_name   | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.42 sec)

> SHOW VARIABLES like '%log_quer%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON   |
+-------------------------------+-------+
1 row in set (0.26 sec)


也可以在該 instance 的 Log & events 觀察到有這個 log 產生


那可以如何測試與觀察呢?

剛剛的 mysql-slowquery.log 可以點選 View 或是 Watch ( 即時觀察 )

可以在 mysql client 連線使用
> select  sleep(15);
+-----------+
| sleep(15) |
+-----------+
|         0 |
+-----------+
1 row in set (15.42 sec)

應該會觀察到

# Query_time: 15.000312  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1562993052;
select sleep(15);



其他小記

設定 DB cluster parameter group 設定 slow_query_log 為 1 ( 啟用 )
建立 新 Reader
  • 發現有套用 slow_query_log
  • 沒有影響現有的 instance

Log exports 是針對整個 cluster 設定不是單一 instance


先記下來

~ enjoy it

Reference:

星期日, 7月 07, 2019

三大雲平台工具容器升級小記 with openSUSE Leap 15 container

三大雲平台工具容器升級小記 with openSUSE Leap 15 container

OS: container with openSUSE Leap 15

awscli:  aws-cli/1.16.193
gcloud: Google Cloud SDK 252.0.0
azure-cli: 2.0.68

上次升級雲平台工具是 20190627, 短短不到 10 天, 因為以下需求今天又來進行升級 
  • azure 以及 aws 工具又有版本升級
  • 加上 aws 指令補齊以及修正 vim 針對中文顯示問題

==== 處理 container 內相關套件升級以及設定 ====

使用 docker run 啟動 container, 進入到 shell
  • docker run -v ~/.aws:/root/.aws -v ~/.azure:/root/.azure -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse15   /bin/bash

Azure 與 AWS 升級的部份參考之前的文章來進行升級

Vim 中文顯示問題處理

#vi   ~/.vimrc

加入相關設定
set encoding=utf8


AWS 指令補齊處理
  • 在 linux 內的處理方式跟 Mac 不一樣, 要用 source 的方式不是使用 complete

#vi  ~/.bashrc

加入相關設定
source   /usr/bin/aws_bash_completer
alias  ls=’ls --color-tty’

==== 處理 container 內相關套件升級以及設定  End ====


接下來進行 image 的 commit
首先觀察剛剛修改的 contaner ID

> docker  ps

CONTAINER ID        IMAGE         COMMAND CREATED             STATUS PORTS NAMES

9b8705c120fb        sakana/ansible_opensuse15   "/bin/bash" 5 minutes ago       Up 5 minutes optimistic_blackwell

使用 docker commit 指令建立新的 container image
> docker  commit  -m "upgrade cli"  -a  "sakana"  9b870  sakana/ansible_opensuse15:20190707

  • 9b870 為剛剛修改好的 container ID
  • 我這邊建立一個 container image 然後 tag name 為 20190707

觀察相關資訊
> docker images

REPOSITORY                  TAG IMAGE ID            CREATED SIZE
sakana/ansible_opensuse15   20190707 05a52c0a9d24        20 seconds ago 2.05GB
sakana/ansible_opensuse15   latest db3e48156fd3        9 days ago 1.68GB
opensuse/leap               15 48b19e84798d        2 months ago 103MB

使用 docker tag 指令將剛剛建立的 image tag 設為 latest
> docker  tag  05a52c0a9d24  sakana/ansible_opensuse15:latest

觀察相關資訊
> docker images

REPOSITORY                  TAG IMAGE ID            CREATED SIZE
sakana/ansible_opensuse15   20190707 05a52c0a9d24        About a minute ago   2.05GB
sakana/ansible_opensuse15   latest 05a52c0a9d24        About a minute ago   2.05GB
sakana/ansible_opensuse15   <none>              db3e48156fd3        9 days ago           1.68GB
opensuse/leap               15 48b19e84798d        2 months ago 103MB

從上面可以看出, 剛剛的 latest 已經被取代, 目前的 latest 是剛剛編輯的版本

為了日後使用, 接下來進行上傳動作

首先 進行 docker  login
> docker login


將剛剛的 image 上傳到 docker hub

> docker push sakana/ansible_opensuse15:20190707

> docker push sakana/ansible_opensuse15:latest

清除沒用到的相關資源
> docker  system  prune

啟動 container 進行相關測試
> docker run -v ~/.aws:/root/.aws -v ~/.azure:/root/.azure -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse15   /bin/bash

工具升級 ok / aws 補齊 ok / vim 中文 ok

~ enjoy it

Reference: