CentOS 6 多實例 編譯安裝mariadb-5.5.59
在單機上運行版本相同的多個mysql實例的,可以通過mysql_install_db初始化到不同的數據目錄,
通過不同的my.cnf指定相關的參數,分別設置不同的啟動和關閉腳本。不過這樣管理起來感覺非常麻煩。
如果啟動四個、五個甚至更多,顯然是無法讓人接受的。不過mysql的設計者們顯然先我們一步想到了這個問題,
其提供了更方便的管理工具 ——— mysqld_multi
系統平臺:
CentOS release 6.9 (Final)
內核 2.6.32-696.el6.x86_64
1.去官網下載適合的源碼包
http://mariadb.org/
mariadb-5.5.59.tar.gz
檢查系統內是否安裝了數據庫。
#rpm -qa|grep MariaDB
#rpm -qa|grep mysql
2.去官網下載cmake源碼包
https://cmake.org/
cmake最新版本需要c++11支持,gcc4.8以下並未包含,因此,需要下載cmake-3.9.6版本,此版本並不需要C + +11
cmake-3.9.6.tar.gz
查看當前系統gcc版本
#gcc -v
gcc version 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
3.解壓cmake包至任意臨時目錄
#tar xvf cmake-3.9.6.tar.gz -C /app
4.編譯安裝cmake
安裝依賴包
# yum install ncurses-devel libaio-devel openssl-devel -y
# cd /app/cmake-3.9.6
#./configure --prefix=/usr/local && gmake -j 4
#gmake install
#which cmake
/usr/local/bin/cmake
#cmake --version
cmake version 3.9.6
5.創建mysql組和賬號
#groupadd -g 500 mysql #useradd -u 500 -g mysql -s /sbin/nologin -M mysql
6.解壓mariadb包至任意臨時目錄
#tar xvf mariadb-5.5.59.tar.gz -C /app
7.編譯安裝mariadb
# cd mariadb-5.5.59
以下的編譯參數,根據自己的需求定制
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-5.5.59 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_DEBUG=0
我使用的AUSU筆記本是 I5 1CPU 4核,2GB內存,8分鐘編譯完成。
# make -j 4 && make install
8.創建軟鏈接mysql指向解壓後的目錄
#cd /usr/local/
#ln -s mariadb-5.5.59/ mysql
9.修改mysql文件夾所屬者和所屬組
#chown -R mysql.mysql /usr/local/mysql/
10.添加PATH至環境變量中
#echo ‘PATH=/usr/local/mysql/bin:$PATH‘ >> /etc/profile.d/mysql.sh
檢查文件
#cat /etc/profile.d/mysql.sh
加載環境變量文件 並檢查
#source /etc/profile.d/mysql.sh
#echo $PATH
11.創建數據庫存放文件夾並修改權限
#mkdir -pv /data/sqldb/{3306,3307,3308}/{etc,log,data,pid,socket,tmp}
#chown -R mysql.mysql /data/sqldb/
#chmod -R 770 /data/sqldb/
12.復制主配置文件my.cnf
這裏先要確認下本機的內存多少,以便使用一個參考模板。
#grep memory support-files/*
找到適合本機內存的模板
本機內存為512M,所以選擇了my-large.cnf這個配置文件
#\cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf
9.修改配置文件
#vim /etc/my.cnf
因為是多實例安裝,這裏的配置註意參考我的。
當然也可以使用腳本自己帶的示例生成樣版示例,自行進行修改
#mysqld_multi --example
在配置文件中多個實例使用 mysqldN 進行表示,其中N 代表實例的id,用於在mysqld_multi 命令中指定實例
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = multipass
# The MariaDB server
[mysqld3306]
port = 3306
socket = /data/sqldb/3306/socket/mysql3306.sock
pid-file = /data/sqldb/3306/pid/mysql3306.pid
datadir = /data/sqldb/3306/data
tmpdir = /data/sqldb/3306/tmp
innodb_file_per_table = 1
skip_name_resolve = 1
#******************************* Logs settings ***************************
log-error = /data/sqldb/3306/log/3306error.log
[mysqld3307]
port = 3307
socket = /data/sqldb/3307/socket/mysql3307.sock
pid-file = /data/sqldb/3307/pid/mysql3307.pid
datadir = /data/sqldb/3307/data
tmpdir = /data/sqldb/3307/tmp
******************************* Logs settings ***************************
log-error = /data/sqldb/3307/log/3307error.log
[mysqld3308]
port = 3308
socket = /data/sqldb/3308/socket/mysql3308.sock
pid-file = /data/sqldb/3308/pid/mysql3308.pid
datadir = /data/sqldb/3308/data
tmpdir = /data/sqldb/3308/tmp
******************************* Logs settings ***************************
log-error = /data/sqldb/3308/log/3308error.log
10.安裝數據庫相關文件
# cd /usr/local/mysql
查看下安裝程序的安裝參數
#./scripts/mysql_install_db --help
必須在此文件夾內執行以下命令,否則會報以下錯誤
FATAL ERROR: Could not find ./bin/my_print_defaults
#./scripts/mysql_install_db --datadir=/data/sqldb/3306/data --user=mysql --skip-name-resolve --basedir=/usr/local/mysql
#./scripts/mysql_install_db --datadir=/data/sqldb/3307/data --user=mysql --skip-name-resolve --basedir=/usr/local/mysql
#./scripts/mysql_install_db --datadir=/data/sqldb/3307/data --user=mysql --skip-name-resolve --basedir=/usr/local/mysql
參數說明 :指定此實例的數據目錄,跳過DNS解析,指定my_print_defaults的父級目錄
出現2個OK即表示安裝正常。
11.復制多實例啟動服務腳本至/etc/init.d目錄
#cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
12.啟動一個實例3306
# mysqld_multi start 3306
13.進行安全配置
由於此源碼包中的mysql_secure_installation 工具默認使用 /tmp/mysql.sock 文件進行連接,可以通過創建軟連接來指向自定義的socket 文件
#ln -s /data/sqldb/3306/socket/mysql3306.sock /tmp/mysql.sock
#/usr/local/mysql/bin/mysql_secure_installation
Enter current password for root 默認為空
Set root password 設置mysql root密碼
Remove anonymous users 是否移除匿名用戶登錄
Disallow root login remotely 是否禁止root遠程登錄
Remove test database and access to it? 是否移除test數據和test賬號
Reload privilege tables now? 是否立即更新權限
Thanks for using MariaDB!
用完之後刪除
#rm -f /tmp/mysql.sock
14. 重復以上2個步驟,將各個實例安全配置完
註意 ln -s /data/sqldb/這裏要變化/socket/mysql這裏要變化.sock /tmp/mysql.sock
15. 添加每個實例的安全關閉數據庫賬號
按上面的配置進行mysqld_multi可以正常啟動,但關閉時確無法正常關閉。因此需要單獨創建一個用於安全賬號,調用mysqladmin命令進行關閉。
#mysql -uroot -p -S /data/sqldb/3306/socket/mysql3306.sock -e "grant shutdown on *.* to multi_admin@‘localhost‘ identified by ‘multipass‘;"
#mysql -uroot -p -S /data/sqldb/3307/socket/mysql3307.sock -e "grant shutdown on *.* to multi_admin@‘localhost‘ identified by ‘multipass‘;"
#mysql -uroot -p -S /data/sqldb/3308/socket/mysql3308.sock -e "grant shutdown on *.* to multi_admin@‘localhost‘ identified by ‘multipass‘;"
確認,以下指令更換socket後重復執行即可。
#mysql -uroot -p -S /data/sqldb/3306/socket/mysql3306.sock -e ‘select user,password,host from mysql.user where user="multi_admin";‘
Enter password:
+-------------+-------------------------------------------+-----------+
| user | password | host |
+-------------+-------------------------------------------+-----------+
| multi_admin | *4FD92416C02EC3BD04A97613DB2CB33717E99D0F | localhost |
+-------------+-------------------------------------------+-----------+
16.將剛才創建的賬號密碼添加至主配置文件/etc/my.cnf
[mysqld_multi]
user = multi_admin
password = multipass
如果兩個實例的數據庫關閉密碼(mysql的密碼,不是系統密碼)相同時,可以通過上面的方式進行設置,如果不同,需要在mysqld_multi項裏註釋掉password項(相當於全局配置),
在各實例裏(有生效作用域的配置)添加相應的pasword密碼。
17. 添加開機啟動
#chkconfig --add mysqld_multi
#chkconfig --list mysqld_multi
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
默認這樣添加腳本的話,在啟動時會報以下錯誤
WARNING: my_print_defaults command not found.
Please make sure you have this command available and
in your path. The command is available from the latest
MySQL distribution.
ABORT: Can‘t find command ‘my_print_defaults‘.
This command is available from the latest MySQL
distribution. Please make sure you have the command
in your PATH.
解決方法:
第一種.在/etc/init.d/mysqld_multi腳本中的最開始行添加PATH
PATH=/usr/local/mysql/bin:$PATH
第二種.添加一個軟鏈接
#ln -s /usr/local/mysql/bin/my_print_defaults /usr/bin/
18.服務器腳本的使用方法
# mysqld_multi [options] {start|stop|reload|report} [實例編號[,實例編號] ...]
實例編號在/etc/my.cnf中這些位置
[mysqld實例編號]
如:
mysqld_multi start 1-3 啟動實例1、2、3
mysqld_multi stop 1-3 關閉實例1、2、3
mysqld_multi stop 8,10-13 關閉實例8、10至13
mysqld_multi stop 沒有參數就是全部關閉
mysqld_multi start 啟動全部實例
19.客戶端連接
本機通過mysql命令進行連接時會受到影響,需要通過-S選項指定socket文件的位置,而遠程主機連接不受影響。如:
#mysql -uroot -p -S /data/sqldb/3306/socket/mysql3306.sock
#mysql -uroot -p -h192.168.5.100
至此,MariaDB多實例 編譯安裝方式安裝完畢。
不足之處
mysqld_multi統一管理多個MySQL實例。雖有方便之處,但在使用過程中。也發現了一些不足之處,
1.選項過於簡單。僅僅有start、stop、report,而沒有status項,所以無法查看服務的狀態;
2.在啟動、關閉服務時,僅僅是運行start、stop這麽一個操作。而不跟蹤操作結果,所以無法確保操作成功運行。
CentOS 6 多實例 編譯安裝mariadb-5.5.59