Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

標籤: MySQL

MySQL 的 replication logs 把硬碟空間吃光

Posted on 2020 年 1 月 31 日2021 年 3 月 12 日 By 日落 在〈MySQL 的 replication logs 把硬碟空間吃光〉中尚無留言

今天服務一直中斷,稿不清楚狀況,只是開 console 進機器看,沒看還好,看了嚇一跳,硬碟空間全部被吃光了。

所以先嘗試把可以清空的資料清空:

sudo apt-get autoclean
sudo apt-get clean

cd ~
rm -fr .cache/*

空出了一些空間,但是也大概只有 1 % 左右,所以用 du 掃了一下目錄狀況,發現 /var 佔用超過 10 GB 的空間,這樣目標很明顯了:Docker 或是 MySQL。

先看 Docker,的確不少已經中止不再使用的 container,直接清空:

 $docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N] Y

du 看了一下, /var 還底下還是有一些佔空間的檔案:

找了一下和 log 有關的設定:

max-binlog-size = 128M
innodb-log-file-size = 64M

似乎都沒與此事件無關。不過看到關鍵字「binlog」,查了一下用途,是 master / client 用來同不的 log,應該是我之前抄 DK 的設定檔,抄完忘記把不需要的東西拔乾淨的關係 XD

兇手找到了就不用客氣,把 MySQL replication 的設定全部註解掉。再來登入 MySQL,使用指定把 replication log 全部清乾淨:

purge master logs before now();
Tags:Linux, MySQL

MySQL non-interactice installation

Posted on 2019 年 11 月 11 日2021 年 3 月 12 日 By 日落 在〈MySQL non-interactice installation〉中尚無留言

相信大家對這個畫面都不陌生:

除了 MySQL 5.7 的某幾個版本會自動產生 root 的 password 以外,大多都是在安裝時讓使用者自行輸入密碼。

但今天你不是手動安裝,而是寫 script 讓主機自行部屬,這下就麻煩了,因為你不可能每台主機都人工輸入密碼,另外像是 AWS 自動部屬的話,你大概連 console 都沒有。但若透過 debconf 是有機會做到完全自動安裝。

首先來安裝 debconf:

sudo apt-get install debconf

稍等為了讓大家看一下 deb 的 interactive mode 是怎麼撰寫的,在安裝 ar 套件:

sudo apt-get install binutils

今天要被我拿來操刀的是「mysql-community-server_5.7.27-1ubuntu18.04_amd64.deb」。先用 ar 把 deb 檔解開,可以看到同下方的檔案:

$ ls
control.tar.xz  data.tar.xz  debian-binary

這邊要解壓縮「tar xvf control.tar.xz」,解開後會多出幾個檔案:

$ ls
conffiles  config  control  debian-binary  postinst  postrm  preinst  prerm  templates

這邊只專注於「config」檔,其他檔案先不管。開啟「config」檔以後,大概可以看到幾個關鍵字,像是:

  • db_input
  • db_get
  • db_fset
  • mysql-community-server/root-pass

這幾個關鍵字和整個 shell script 就是用來和使用者互動的指令,也就是最上面看到的那張圖。經由 db_set + variable-name 就可以暫存使用者輸入的資料,接下來就透過這幾個變數來動手腳。

先告知 debconf 不使用互動的方式來安裝 deb:

export DEBIAN_FRONTEND="noninteractive"

既然沒有和使用者互動,理當不會有 root 密碼,但可透過「debconf-set-selections」的方式來幫 package 設定:

debconf-set-selections <<< "mysql-community-server/root-pass password root"

之後安裝時就不會出現使用者輸入提示視窗了:

dpkg -i mysql-community-server_5.7.27-1ubuntu18.04_amd64.deb
apt-get install -f  # 安裝需要的 dependedncy
apt --fix-broken -y install
Tags:Linux, MySQL

MySQL 8.0 的新密碼加密 plugin 導致 PHP 連線失敗

Posted on 2019 年 7 月 30 日2021 年 3 月 12 日 By 日落 在〈MySQL 8.0 的新密碼加密 plugin 導致 PHP 連線失敗〉中尚無留言

今天很難得打開 phpMyAdmin 來看一下有什麼改變,但發現一直無法登入,顯示錯誤訊息「」。

查了一下才發現 MySQL 8 預設的密碼有多種格式,預設的格式 PHP 還不支援,所以會登入失敗 (但用 console 會成功)。

解決方法是暫時改為舊版本的密碼儲存方式:

alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your-password';
flush privileges;

然後在設定檔裡面多新增一條規則,把預設的密碼儲存方式改回舊版的:

[mysqld]
default-authentication-plugin = mysql_native_password

Tags:MySQL, PHP

MySQL 8.0 不再使用的設定參數

Posted on 2019 年 7 月 20 日2021 年 3 月 12 日 By 日落 在〈MySQL 8.0 不再使用的設定參數〉中尚無留言

以下幾個參數,在 MySQL 8.0 不在繼續支援、使用:

  • query-cache-type
  • query-cache-size
  • innodb_large_prefix

整理過後,我的 MySQL 8 設定檔如下:

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log


default-authentication-plugin = mysql_native_password



performance_schema = Off

default-storage-engine         = InnoDB
character-set-server           = utf8mb4
collation-server               = utf8mb4_unicode_ci
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'





# LOGGING #
log-error    = /var/log/mysql/error.log
log-error                      = /var/lib/mysql/mysql-error.log
log-queries-not-using-indexes  = 1
slow-query-log                 = 1
slow-query-log-file            = /var/lib/mysql/mysql-slow.log
binlog_expire_logs_seconds     = 86400  # 1 day
max-binlog-cache-size          = 4M
max-binlog-size                = 128M



# MyISAM #
key-buffer-size                = 16M
myisam-recover-options         = FORCE,BACKUP
max-allowed-packet             = 16M
max-connect-errors             = 1000000




# BINARY LOGGING #
server-id                      = 4782375
log-bin                        = /var/lib/mysql/mysql-bin
expire-logs-days               = 14
sync-binlog                    = 1




# MyISAM #
key-buffer-size                = 16M
myisam-recover-options         = FORCE,BACKUP
max-allowed-packet             = 16M
max-connect-errors             = 1000000




# CACHES AND LIMITS #
tmp-table-size                 = 16M
max-heap-table-size            = 32M
max-connections                = 100
thread-cache-size              = 50
open-files-limit               = 65535
table-definition-cache         = 1024
table-open-cache               = 524288




# INNODB #
innodb-flush-method            = O_DIRECT
innodb-log-files-in-group      = 2
innodb-file-per-table          = 1
innodb-buffer-pool-size        = 16M
innodb-flush-log-at-trx-commit = 1
innodb-log-file-size           = 64M





# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_ALL_TABLES

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0






[mysqldump]
default-character-set = utf8mb4

gist 連結:https://gist.github.com/johnroyer/43f18557ad9ff3070b1d22e7b957f950

Tags:MySQL

幫 MySQL 加上 storage engine 設定來支援 utf8mb4

Posted on 2019 年 4 月 25 日2021 年 3 月 12 日 By 日落 在〈幫 MySQL 加上 storage engine 設定來支援 utf8mb4〉中尚無留言

在前篇有提到要在 my.ini 設定預設值,但實際要完全可以支援到 UTF8mb4 的話,還要多幾項設定,不然還是有機會遇到錯誤,像是:「The maximum column size is 767 bytes」之類的。

先講「innodb_large_prefix」,由於 UTF8mb4 會讓儲存相同內容的 bytes 更多,建立索引時會發生錯誤,所以必須支援 large preefix 來避免建立所以時發生錯誤。可以參考 MySQL 官方說明。

在 MySQL 5.7 之後,InnoDB 新增個幾種儲存格式,像是 Barracuda,可以應付各種不同的情境,也可以支援 UTF8mb5 這種字元,所以要使用的話大概會需要這樣設定:

innodb_large_prefix
innodb_file_per_table = 1
innodb_file_format=Barracuda
innodb_default_row_format=DYNAMIC

完整的設定檔大概會類似下面這樣:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
innodb_large_prefix
innodb_file_per_table = 1
innodb_file_format=Barracuda
innodb_default_row_format=DYNAMIC

[mysqldump]
default-character-set = utf8mb4

Tags:MySQL

文章分頁

上一頁 1 ... 3 4 5 6 下一頁

其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.