邁向 RHCE 之路 (Day30) - MySQL 資料庫伺服器

1、前言

MySQL 由於效能好、低成本、穩定性夠,對於中小企業來說是最好的選擇,目前分為可免費使用的 社群版本(Community Edition),以及需要授權費用的 標準版(Standard Edition)、企業版(Enterprise Edition)、電信營運版(Cluster Carrier Grade Edition),關於版本功能詳細資訊可參考 MySQL 授權版本功能比較




文章目錄

1、前言
2、實作環境
3、安裝 MySQL 檔案分享套件
4、設定 IPTables 防火牆規則
5、修改 MySQL 設定檔
6、修改 SELinux 設定值
7、啟動 MySQL 服務
8、設定 MySQL 管理密碼

2、實作環境

  • OS: CentOS 6.0 (32 bit)
  • MySQL 套件資訊: mysql-server-5.1.52-1.el6_0.1.i686
  • MySQL 設定檔: /etc/my.cnf
  • IPTables 防火牆: TCP 協定 Port 3306
  • SELinux 權限: mysqld_db_t

3、安裝 MySQL 檔案分享套件

請使用 yum 指令搭配 MySQL 套件名稱 mysql-server 即可進行套件安裝。
yum -y install mysql-server   //安裝 MySQL 套件
rpm -qa mysql-server           //查詢 MySQL 套件版本
  mysql-server-5.1.52-1.el6_0.1.i686
rpm -ql mysql                  //查詢 MySQL 設定檔路徑
  /usr/bin/msql2mysql
  ...略...


4、設定 IPTables 防火牆規則

MySQL 資料庫服務屆時啟動時會 TCP 協定 Port 3306,因此必須修改 IPTables 防火牆規則以便等一下進行測試,請修改 IPTables 防火牆規則設定檔「/etc/sysconfig/iptables」加上允許相關 Port 號的規則,修改防火牆規則後請使用指令「service iptables restart」來重新啟動防火牆服務,以便防火牆規則套用生效,並且使用「service iptables status」指令來確定目前防火牆規則是否有允許相關 Port 號。
vi /etc/sysconfig/iptables             //修改防火牆規則
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
service iptables restart               //重新啟動防火牆服務
service iptables status | grep 3306  //查看防火牆規則是否套用生效
  5  ACCEPT  tcp  --  0.0.0.0/0   0.0.0.0/0   state NEW tcp dpt:3306
chkconfig mysqld on                    //開機自動啟動 MySQL 服務


5、修改 MySQL 設定檔

接著修改 MySQL 設定檔 「/etc/my.cnf」,主要為修改資料庫預設存放路徑 「datadir」 的設定,將資料庫存放路徑由預設的 「/var/lib/mysql」 修改至 「/home/db」 掛載點,下列僅列出設定檔需要修改的地方其預設值及修改後的內容:
vi /etc/my.cnf          //修改 MySQL 設定檔
  datadir=/var/lib/mysql   //預設值,資料庫預設存放路徑
  datadir=/home/db         //修改後
mkdir /home/db          //建立資料夾


6、修改 SELinux 設定值

修改 SELinux 安全機制的設定值,因為將 MySQL 資料庫預設存放路徑由 「/var/lib/mysql」 修改至 「/home/db」,因此新的資料夾其 SELinux 安全機制的權限勢必與原來的資料夾不同,若不進行修改的話屆時啟動 MySQL 服務時便可能會因為 SELinux 權限問題造成無法啟動 MySQL 服務的狀況。
ls -dZ /var/lib/mysql /home/db
  drwxr-xr-x. root  root  unconfined_u:object_r:home_root_t:s0 /home/db
  drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql

接著透過「semanage fcontext -a -t」指令配合 SELinux 權限 「mysqld_db_t」,指定「/home/db」資料夾設定此權限為 「SELinux預設權限」,之後使用「restorecon -Rv」指令把資料夾還原至剛才設定的 SELinux 預設權限,若執行 semanage 指令發現系統中沒有此一指令請安裝 policycoreutils-python 套件即可 (yum -y install policycoreutils-python)。
semanage fcontext -a -t mysqld_db_t "/home/db(/.*)?" //設定 SELinux 預設權限
restorecon -Rv /home/db                                 //還原 SELinux 權限
chown mysql:mysql /home/db                              //設定資料夾權限
ls -dZ /var/lib/mysql /home/db                          //查看資料夾 SELinux 權限
  drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 /home/db
  drwxr-xr-x. mysql mysql system_u:object_r:mysqld_db_t:s0 /var/lib/mysql


7、啟動 MySQL 服務

完成修改 SELinux 安全機制權限設定後,我們可以放心啟動 MySQL 相關服務,請使用指令「service mysqld start」來啟動 MySQL 服務,並且於服務啟動後使用「netstat」指令來查看系統是否開啟了相關 Port 號,以及使用「ps」指令來查看相關執行序是否運作。
service mysqld start         //啟動 MySQL 服務
  Initializing MySQL database:  Installing MySQL system tables...
  ...略...
  Starting mysqld:           [  OK  ]
netstat -tunpl |grep :3306  //查看是否開啟 Port 3306
  tcp  0  0 0.0.0.0:3306    0.0.0.0:*   LISTEN   6298/mysqld
ps aux |grep mysqld
  root  6209  0.0  0.1  5080  1356 pts/0   S  15:20  0:00 /bin/sh /usr/bin/mysqld_safe
  ...略...


8、設定 MySQL 管理密碼

MySQL 資料庫管理者預設帳號名稱為 「root」 (請別跟 CentOS 作業系統的超級管理者 root 帳號搞混),並且可以透過 「mysqladmin」 指令來設定其密碼,下列操作為將 MySQL 資料庫管理者密碼設定為 「123456」,若日後您需要修改管理密碼,則在指令「password」前面加上「-p」參數即可進行變更。
mysqladmin -u root password '123456'  //設定 MySQL 管理密碼
mysql -u root -p                        //登入資料庫
  Enter password:                          //輸入管理密碼
  ...略...
  mysql> show databases;                 //查看資料庫清單
  +--------------------+
  | Database           |
  +--------------------+
  | information_schema |
  | mysql              |
  | test               |
  +--------------------+
  3 rows in set (0.00 sec)
  mysql> exit                             //離開資料庫
  Bye