跳至主要内容

4 篇文章 含有標籤「ubuntu」

檢視所有標籤

· 閱讀時間約 3 分鐘
junminhong(jasper)

問題

最近突然收到機器disk space使用量已滿的通知, 並造成服務暫時性停擺

趕緊進入機器排查, 發現mysql使用的磁碟量非常高, 但以目前資料量來說是不成正比的

根據排查結果發現mysql裡面有一個檔案佔用磁碟容量非常多

--- 可以使用這串SQL query查出目前佔用容量最大的file, 可以發現ibtmp1 file容量非常大
SELECT FILE_NAME, FILE_TYPE, TABLESPACE_NAME, (TOTAL_EXTENTS * EXTENT_SIZE) / 1024 / 1024 / 1024 AS 'total size(GB)'
FROM INFORMATION_SCHEMA.FILES
ORDER BY `total size(GB)` DESC;

找到問題後?

  • 首先進到mysql.cnf裡面新增
# 根據自己的需求設定最大限制要多少容量, 這邊則先設定20G
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:20G
  • 設定完成之後, 請將mysql進行重啟
# 重新啟動mysql service
sudo systemctl restart mysql.service
  • 查看設定是否有正確套用
-- 可以使用這串SQL query確認剛剛的設定有正確被套用
SHOW VARIABLES LIKE '%innodb_temp_data_file_path%';

-- 要能夠看到這個設定, 才代表你剛剛設定的東西有被套用
ibtmp1:12M:autoextend:max:20G

為什麼會這樣?

由於預設情況下, mysql會創建12MB的臨時表空間, 當如果今天某個操作創建出了20MB的臨時表空間, 這時候會自動擴展至20MB, 會自動回收資料, 但擴展後佔用的磁碟空間則不會自動回復至12MB

那這個時候可以透過設定最大擴展size或者重新啟動服務解決無限擴展的問題

可以怎麼預防?

  • 減少會使用到大空間臨時表的操作, 如: 複雜的查詢、排序、聯合查詢

參考資料

· 閱讀時間約 2 分鐘
junminhong(jasper)

為什麼需要安裝指定版的python

因為ubuntu16預設的python是3.5, 當今天需要安裝一些套件做編譯時, 會遇到版本過舊的問題

那要怎麼安裝呢?

方法一: PPA

# 更新安裝包列表
sudo apt-get update

# 安裝套件
sudo apt-get install software-properties-common

# 加入ppa:deadsnakes/ppa
add-apt-repository ppa:deadsnakes/ppa

# 更新安裝包列表
sudo apt-get update

# 直接透過apt-get安裝指定版本的python
sudo apt-get install python3.9

方法二: 自己的python自己編譯 😆

由於無法正常使用PPA直接安裝其他的python版本, 只好自己編譯了...

python的原始碼可以在這邊下載

# 取得python3.9.18壓縮包
wget -c https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz

# 解壓縮
tar -zxvf Python-3.9.18.tgz

# 進入資料夾
cd Python-3.9.18

# 配置編譯環境
./configure --prefix=/usr/local/bin/[email protected]

# 編譯
make

# 安裝
sudo make install

# link, 將原本系統的python3連接到先編譯好的python3.9.18上
sudo ln -sf /usr/local/bin/[email protected]/bin/python3 /usr/bin/python3

# 查看python 版本
python3 -V

奉勸

os版本還是要記得升級啊, 免得新套件很多東西都沒有辦法正常編譯😭

· 閱讀時間約 1 分鐘
junminhong(jasper)

簡單幾步驟, 立即享有不同版本的docker-compose 🚀

# 下載docker-compose
# version, 根據自己的需求調整
sudo curl -L "https://github.com/docker/compose/releases/download/${version}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 改變權限
sudo chmod +x /usr/local/bin/docker-compose

# 查看docker-compose版本
docker-compose -v

· 閱讀時間約 4 分鐘
junminhong(jasper)

前言

最近專案在使用Capistrano部署的時候, 發現機器上的node version比專案需求的還要低, 導致一直沒有辦法正常部署

升級的同時順便紀錄一下步驟, 以便免未來的我又忘記了😅

實作升級

ubuntu 升級node version, 其實方法還蠻多的, 可以透過nvm或者PPA

nvm

蠻方便的一個node version manager tool, 但是在使用Capistrano部署的時候似乎沒有辦法正常吃到nvm的default node.js, 所以只好改用PPA來安裝以及更新node

安裝

# 更新套件列表及版本資訊
sudo apt-get update

# 透過curl去抓install script
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash

# 設定一下nvm環境變數
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

# reload
source ~/.bashrc
source ~/.zshrc

基本指令

# 查看目前可以被安裝的node version
nvm ls-remote

# install node.js
nvm install node

# list installed node version
nvm ls

# choose nvm version
nvm use node

# 設定node版本為default
nvm alias default node

PPA(Personal Package Archive)

什麼是PPA

PPA是一個私有的軟體包存儲庫, 允許開發者將他們開發或打包的軟體上傳到Launchpad(一個由Canonical Ltd. 提供的開發平台), 從而讓所有Ubuntu用戶可以方便地安裝和更新

通常, 一個PPA包含一個或多個軟體包, 這些包可能是正式Ubuntu軟體庫中沒有的或者是更新版本的軟體

nodesource

那我們要在ubuntu上面安裝node.js, 需要透過nodesource

安裝

# 更新套件列表及版本資訊
sudo apt-get update

# 安裝curl gnupg ca-certificates 套件
sudo apt-get install -y ca-certificates curl gnupg

# 製作apt key要放的資料夾
sudo mkdir -p /etc/apt/keyrings

# 製作gpg key並放到剛建立好的資料夾內
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

# 安裝對應node version source list
# 假設今天想要安裝16, 那這邊就要設定16
NODE_MAJOR=20
# 接著將source放進去nodesource.list檔案裡面
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

# 再跑一次更新套件列表以及版本, 這邊會根據剛剛設定好的source去把對應的node.js version拉下來
sudo apt-get update

# 透過policy可以確認剛剛的設定是否成功, 可以看到相關訊息
apt policy nodejs

# 安裝node.js, 會自動幫你抓當前版本最新, 也就是說你剛剛設定16的話, 就會去幫你抓node.js 16最新的版本
sudo apt-get install nodejs -y

解除安裝

apt-get purge nodejs &&\
rm -r /etc/apt/sources.list.d/nodesource.list &&\
rm -r /etc/apt/keyrings/nodesource.gpg

舊版做法

# 更新yarn key
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
# 設定PPA為16版, 這個是舊版做法
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -

結論

‼️注意 nodesource新版有在指令上有做調整

原本使用舊的作法一直遇到找不到相關node.js版本的問題, 花了一點時間在排查, 後面才發現指令上有做些調整😆