在 CubieTruck 上如何增加 Apache 和 MySQL 連結數目

這台 CubieTruck 剛安裝完 Ubuntu 之後才發現,即便 Ubuntu 伺服器版本,Apache 預設最大連結數目只有 100 個, 資料庫 MySQL 只有 50 個。換言之,只能支援最多 50 個人同時可以同時查詢 MySQL。老實說,我不知道這台 CubieTruck 的能耐倒底到哪裡,同時50個人查詢會不會造成問題,我只是覺得有點少,所以打算把這個數目增加到 100 個。

Apache 的設定在 /etc/apache2/apache2.conf 檔案裡面

# nano /etc/apache2/apache2.conf

修改這一行

MaxKeepAliveRequests 100

MySQL 的設定在 /etc/mysql/my.cnf 檔案裡面

# nano /etc/mysql/my.cnf

然後找到這一行改為

max_connections = 100

然後重啟兩個服務即可

# service apache2 restart
# service mysql restart

這些數值僅供參考,作為一台伺服器,同時提供 200 人服務應該是沒有什麼問題才是。

如何確認 WordPress 是採用 InnoDB 還是MyISAM資料庫方式

WordPress是採用 mysql 當做資料庫後端程式,而 mysql 有分為 InnodDB和MyISAM兩種資料庫方式,這兩種各有優劣。我們這一篇不討論到底誰的效能比較好,因為我覺得在討論之前,我們總得先知道我們 WordPress 目前是採用哪種方式,然後再來討論如何優化,否則一切徒勞無功。

首先我們先進入 mysql 後台。

# mysql -u root -p

輸入 root 密碼後就可以進入mysql 的後台,然後我們輸入。

mysql> select TABLE_NAME, ENGINE from information_schema.TABLES WHERE TABLE_SCHEMA='wordpress';

此時就會輸出,
1

 

或是

2

這時候,mysql ENGINE就會告訴你 WordPress的所有表格到底是採用InnoDB 或是 MyISAM哪個方式了,我的 CubieTruck是InnoDB的,得找些資料來優化優化了。

CubieTruck上MySQL的效能調校

雖然CubieTruck的CPU比起Intel系列的CPU實在不怎麼樣,但是優點是記憶體有2GB大,可以用來揮霍一下。因為這台 CubieTruck 普通時也沒有跑其他什麼服務,所以希望能把多餘的記憶體用在 mysql 上,希望 WordPress 能載入快一點,雖說我已經把 mysql databases 都移到硬碟上了,畢竟記憶體還是比硬碟快。

這一次我們會動到 /etc/mysql/my.cnf 檔案裡面兩個參數,innodb_buffer_pool_size innodb_log_buffer_size,但在修改之前我們想先觀察一下預設值到底是多少。先在終端機上登入 mysql 後台

# mysql -u root -p

然後輸入 root 的密碼,在 mysql 後台輸入

mysql >SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
mysql >SHOW VARIABLES LIKE 'innodb_log_buffer_size';

這樣 mysql 就可以秀出預設值分別是128MB和8MB,我決定把他們加大一些,所以必須修改/etc/mysql/my.cnf 檔案,編輯這個檔案然後找到 [mysqld] 這個段落,之後寫入

[mysqld]
...
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 32M

存檔之後必須重啟 mysql 服務方能生效。

# service mysql restart

再進入 mysql 後台觀察是否數值已經被改變了呢?如果是的話就觀察一下效能是否有增加囉!

如何在 CubieTruck 搭建一個輕量級的 Apache 網站

對於一個伺服器來說,其中 HTTP 的服務是不可缺少的。目前最流行的作法就是以 Apache2 加上 PHP5和MySQL來搭建一個輕量級的HTTP網站。目前的套件都已經很進步了,只要安裝一下套件及執行一些命令就可以了。

在安裝之前你先確定你的系統已經更新到最新版本。

# apt-get -f install
# apt-get update
# apt-get upgrade

之後,第一步驟需要安裝的就是 Apache2 套件。

# apt-get install apache2

猶如之前提及的,現在的套件都已經很完備了,所以安裝完之後應該可以立刻用瀏覽器看看自己的網站 http://www.example.org/ 應該會有一個在 /var/www 底下的檔案列表或是預設的Apache網頁,這也代表你的 Apache2 安裝成功了,你開始擁有你自己的HTTP平台。

http://你的IP位址

接下來就是安裝 MySQL 資料庫,需要的套件如下,注意整個安裝過程最好以 root 身分執行,才不會導致權限不足的錯誤。

# apt-get install mysql-server php5-mysql

安裝好 MySQL 套件之後,你必需起始化 MySQL 資料庫

# mysql_install_db
# mysql_secure_installation

整個過程會要求輸入 root 的密碼,請您確定好,最好密碼含有英文字母和數字,而且最好十個字元以上。執行完之後,MySQL 也應該是安裝好了。

最後一個步驟就是安裝 PHP5 套件,需要的套件如下:

# apt-get install php5 libapache2-mod-php5 php5-mcrypt php5-cli

經過幾分鐘後,整個 PHP5的套件就會安裝完畢。然後重啟 Apache2 服務即可。

# service apache2 restart

夠簡單吧!當然這都是最基礎的,你還得微調一下你的 Apache2/PHP5/MySQL的效能,讓它能在效能低的可憐的 CubieTruck 運作順暢!

CubieTruck 的 MySQL 瘦身大法

MySQL是一個羽量級的 databases,所以面對大量的資料時,資料庫會變得十分龐大,這時候就必須手動幫它瘦身。

首先先備份舊的 databases,假定備份檔名為 /mnt/data/backup/backup.sql

mysqldump -u root -p --quick --force --routines --add-drop-database --all-databases --add-drop-table --events > /mnt/data/backup/backup.sql

然後停止 mysql 服務,並刪除舊的 databases

service mysql stop
rm /var/lib/mysql/ibdata1
rm /var/lib/mysql/ib_logfile*

然後重啟 mysql 服務

service mysql start

把之前的備份檔案匯入 mysql

mysql -u root -p < /mnt/data/backup/backup.sql

這樣就可以了,到 /var/lib/mysql 目錄下看看是否檔案有變小嗎?

CubieTruck Mysql 使用者權限檢查與管理

之前寫程式用了很多 mysql 的資料庫,但是對Mysql 使用者這塊領域不是很清楚。尤其在建立這台 CubieTruck 伺服器時,不小心誤建立了很多錯誤的使用者以及賦予錯誤的權限,所以我想好好整理一下。

首先在命令列中登入 mysql 後台

mysql -u root -p

然後輸入 root 密碼之後,想要看到使用者的話就輸入

mysql> select user,host from mysql.user;

這樣就可以顯示出 CubieTruck 所有目前 mysql 裡面的使用者與箱對應的主機名稱,這個表格分為 user 和 host 兩個欄位,尤其 host 欄位是 % 代表所有的,這很有可能是錯誤的,所以刪除的指令就是

mysql> delete from mysql.user where user='使用者名稱' and host='主機名稱';

建立使用者的話要比較小心,因為使用者欄位最多只能 16 個字元,所以必須用單引號(’)區隔使用者和主機名稱。

mysql > create user '使用者名稱'@'主機名稱' identified by '密碼';

注意,在某些版本中,'使用者名稱'@'主機名稱'和'使用者名稱@主機名稱'是不一樣的,要讓這個使用者有某個資料庫的使用權,

mysql > grant all on 資料庫名稱.* to '使用者名稱'@'主機名稱';

檢查某個使用者目前的權限

mysql > show grants for '使用者名稱'@'主機名稱';

更改某個使用者的密碼

mysql> set password '使用者名稱'@'主機名稱' = password('密碼');

最後要寫入資料庫,讓權限設定生效

mysql> flush privileges;
mysql> quit

顯示目前 mysql 所有資料庫

mysql> show databases;

刪除某個不用的資料庫

mysql > drop databases 資料庫名稱;

使用某個資料庫以備後續查詢

mysql > use 資料庫名稱;

使用某個資料庫之後查詢整個表格

mysql > show tables;

在Mysql 建立某個資料庫

mysql > create database 表格名稱;

對了,mysql 語法中命令大小寫是沒有區分的,也就是大小寫沒有差別的。而且大部分的命令是以 ‘;‘結尾的。

CubieTruck MySQL 分析優化時出現 Table is already up to date

之前有一篇文章是講到如何用 mysqlcheck 來分析,檢查,優化你的 mysql 資料庫。我們來複習一下。

你想要分析所有的資料庫,那就下

mysqlcheck -a --all-databases -u root -p

如果要檢查所有的資料庫

mysqlcheck -c --all-databases -u root -p

如果要最佳化所有的資料庫,

mysqlcheck -o --all-databases -u root -p

但是今天我在優化的過程中出現一個以前不曾看過的訊息

mysql.columns_priv Table is already up to date
mysql.db Table is already up to date
mysql.event Table is already up to date
mysql.func Table is already up to date

看到Table is already up to date不必緊張,它只是告訴你,你的Table已經是最新的了,不需要再分析,檢查和優化了。

CubieTruck MySQL 資料庫錯誤檢查

mysql 有提供一個程式 mysqlcheck,用來檢查,分析,優化你的 mysql databases。mysqlcheck 的語法是

  • -a = 分析資料庫
  • -c = 檢查資料庫
  • -o = 最佳化資料庫
  • -r = 執行可以修復大部分問題的修復,只是唯一值不唯一時不能修復。

一般在 Linux 裡面是可以一次性操作,也就是把所有的參數都下齊

mysqlcheck -a -c -o -r -m --all-databases -u root -p

但是如果在CubieTruck上運行,你會得到如下的錯誤訊息,

Error: mysqlcheck doesn’t support multiple contradicting commands.

意思是CubieTruck安裝的mysqlcheck不能同時執行不同狀態參數,可能有一些性能上的考量吧?所以必須一個一個下,如果你想要分析所有的資料庫,那就下

mysqlcheck -a --all-databases -u root -p

如果要檢查資料庫

mysqlcheck -c --all-databases -u root -p

如果要最佳化資料庫,

mysqlcheck -o --all-databases -u root -p

這個我試過,大部分的表格是不支持最佳化,但是沒有關係,mysqlcheck會重新產生表格,讓冗餘資料慢慢不見。對於維護一個伺服器來說,這是必須要的。

注意,執行這些指令時,不需要刻意把 mysql 服務停掉。修復是一種不可逆的操作,確認自己了解 mysql 的語法,並確實備份好你的 mysql 資料庫。

優化 MySql 性能

自從裝上 owncloud 之後,就拼命往自己的雲端丟東西,反正硬碟也夠大,不像之前用 Dropbox 那般綁手綁腳了。但是我發現一個問題就是,如果同步大檔案時,速度沒有問題,端看你PC端的上傳速度和CubieTruck的下載速度。我在自己地方都可以達到 500-600KB以上,也許這就是頻寬的上限了。

凡事都有例外,我發現如果同步一些小的零碎檔案,速度很慢,觀察結果是大約每兩三秒才同步一個檔案(檔案大小只有20KB),這就有點不合理了。

所以我就用 top 去觀察,當然 apache 這個行程是榜上有名的(預期中),但 mysqld 這隻程式也常常出現,這就讓我想到是不是 ownload 在 query 和 update databases 時因為太多資料,所以拖慢了 ownload 同步小檔案的速度。所以我這裡優化了一下 mysql

修改 /etc/mysql/my.cnf的定義

max_connections = 50

原本是被 mark # 起來的 wait_timeout = 60 ; 沒有這行,必須新增然後重啟一下 mysql

service mysql restart

發現,速度一樣龜速,只好再安裝 mysqltuner

apt-get install mysqltuner

安裝完,檔案在 /usr/bin/mysqltuner 裡面,現在不比以前,必須用 perl 來執行,現在直接執行

mysqltuner

輸入帳號密碼,這樣就完成囉,記得還是要重啟 mysql

service mysql restart

發現 ownload 同步零碎小檔案速度快多了。

Syslog 一直報 Mysql 需要升級

‘明天是台灣228紀念日,放假一天,所以又有連假三天,所以來看看 Syslog 有沒有什麼地方需要注意的。發現 syslog 一直報

Feb 27 13:23:36 cubietruck /etc/mysql/debian-start[6884]: Upgrading MySQL tables if necessary.

所以上網找了一下資料,看來像是 MyISAM 的 Table 出問題,但是,檢查起來都沒任何異常,先假設是升級 MySQL 造成的問題,所以手動執行 mysql_upgrade 來完成升級動作。

mysql_upgrade -u root -p

若出現下述訊息, 則加上 –force 參數

This installation of MySQL is already upgraded to 5.1.49, use --force if you still need to run mysql_upgrade

執行結果

Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
mysql.columns_priv  OK
mysql.db            OK
mysql.event         OK
mysql.func          OK
Running 'mysql_fix_privilege_tables'...
OK

然後再重啟 mysql 服務

service mysql restart

希望能解決問題。