本文介紹mysql各種安裝方法(rpm/glibc通用二進制/源碼編譯)以及多實例配置的方法,,沒什么技術(shù),,算是一篇方法歸總文章,。
- 本文的安裝環(huán)境為centos6.6和centos7.2,但大多數(shù)地方都以centos6.6作為演示示例,。
- 本文安裝MySQL時,,它們的運行身份為mysql,數(shù)據(jù)目錄datadir為/mydata/data,。
- pid文件路徑設置為/mydata/data/mysql.pid或/mydata/data/`hostname`.pid,。
- 由于mariadb和mysql 5系列并沒有太大的不同。因此僅詳細展示mysql的安裝,。最后將簡單提一提mariadb,。
1. mysql單實例安裝
1.1 rpm包安裝mysql
直接yum安裝mysql-server即可。但注意兩點:
(1).centos7上,,yum默認將安裝mariadb,。 (2).centos6上,yum默認安裝的版本比較老(5.1版),,要安裝mysql 5.6或mysql 5.7,,可以從官方下載,也可以使用以下配置的yum源,。
release=`awk -F "[ .]" '{print $4}' /etc/redhat-release`
cat <<eof>/etc/yum.repos.d/mysql.repo
[mysql56]
name=MySQL
baseurl=http://repo./yum/mysql-5.6-community/el/$release/\$basearch/
enabled=1
gpgcheck=0
[mysql57]
name=MySQL
baseurl=http://repo./yum/mysql-5.7-community/el/$release/\$basearch/
enabled=1
gpgcheck=0
eof
此外,,在sohu鏡像站點也提供了mysql的各個rpm版本。地址:http://mirrors.sohu.com/mysql/
還需注意,,配置了yum源后安裝Mysql將使用mysql-community-*安裝各mysql相關(guān)包,,例如mysql-community-server。
安裝完成后,,啟動mysqld,。
shell> service mysqld start # 或 systemctl start mysqld
如果啟動失敗,則可能需要初始化MySQL,。
shell> mkdir -p /mydata/data
shell> chown -R mysql.mysql /mydata/data
shell> mysql_install_db --datadir=/mydata/data --user=mysql
如果使用mysql_install_db 初始化時提示該命令已經(jīng)廢棄(5.7版本可能會如此提示),,那么使用下面的命令進行初始化。
# 初始化時,,為root@localhost創(chuàng)建一個臨時密碼存放在mysql.log中
shell> mysqld --initialize --datadir=/mydata/data --user=mysql
# 初始化時,,為root@localhost創(chuàng)建一個空密碼
shell> mysqld --initialize-insecure --datadir=/mydata/data --user=mysql
初始化后再啟動,啟動成功后連接數(shù)據(jù)庫并修改root@localhost 用戶的密碼,,然后退出,。
shell> mysql
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> \q
如果前面使用mysqld --initialize 初始化數(shù)據(jù)庫,那么將會為"root@localhost"創(chuàng)建一個密碼,,這將使得無法直接使用mysql 命令連接數(shù)據(jù)庫,。可以先從mysql.log中篩選出創(chuàng)建的臨時密碼,,然后再手動修改為"123456",。
shell> grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
mysql> \q
1.2 通用二進制包安裝mysql
通用二進制包相當于windows中的便攜版軟件,解壓后稍微配置下就可以直接使用,,不用安裝,。
mysql通用二進制版官方下載地址:
其中文件中的glibc2.12表示的是Linux系統(tǒng)的glibc版本要比2.12新,可以使用ldd --version 查看glibc版本,。在CentOS 6上glibc默認就是2.12的,,所以無需顧慮。
shell> tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
shell> ln -s /usr/local/mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
1.2.1 初始化數(shù)據(jù)庫
不使用rpm包安裝,,就需要對mysql進行初始化以創(chuàng)建一些文件,、庫和指定一些參數(shù)。但在初始化mysql前,,要預先做一些操作,。
shell> mkdir -p /mydata/data
shell> useradd -r -s /sbin/nologin mysql
shell> chown -R mysql.mysql /usr/local/mysql
shell> chown -R mysql.mysql /mydata/data
shell> cd /usr/local/mysql
shell> scripts/mysql_install_db --datadir=/mydata/data --user=mysql
shell> chown -R root.root /usr/local/mysql
執(zhí)行mysql_install_db 時會在/tmp下創(chuàng)建臨時表,所以mysql用戶需要對/tmp有寫權(quán)限,,否則執(zhí)行實例初始化腳本時可能會報類似下面的錯誤: ERROR: 1 Can't create/write to file '/tmp/#sql_7a0e_0.MYI' (Errcode: 13) 這說明沒有寫權(quán)限,,所以需要修改/tmp目錄的權(quán)限:
chmod 1777 /tmp
同樣,mysql_install_db 初始時如果提示已廢棄,,則使用如下方法:
bin/mysqld --initialize-insecure --datadir=/mydata/data --user=mysql
初始化完成后,,提供配置文件和服務啟動腳本。
shell> cp -a support-files/mysql.server /etc/init.d/mysqld
shell> cp -a support-files/my-default.cnf /etc/my.cnf
# 修改my.cnf的datadir
shell> vim /etc/my.cnf
[mysqld]
datadir=/mydata/data
如果是centos7,,則提供如下服務啟動腳本(如有必要,,修改pid文件路徑)。
shell> cat /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev./doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/var/run/mysqld/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service
ExecStart=/usr/local/mysql-5.7.19/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
修改"root@localhost"密碼,。
shell> mysql
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> \q
1.2.2 安裝后的規(guī)范化操作
編譯安裝或通用二進制安裝后,,一般都需要做一些額外的操作,包括設置環(huán)境變量,、輸出頭文件和庫文件,、設置man路徑。
echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
chmod +x /etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql
1.3 編譯源碼安裝mysql
建議別沒事找事,,嘗試編譯裝MySQL,,完全是吃力不討好的事。如果確實要編譯安裝,,把my.cnf,、服務管理腳本、編譯選項等涉及到運行文件路徑的項確保相同,例如pid文件,、socket文件,、datadir路徑、log文件,。并保證mysql涉及到的目錄所有者和所屬組都是mysql,,例如默認的pid路徑/var/run/mysql/。
mysql源碼包下載地址:
1.3.1 編譯安裝過程
關(guān)于編譯選項,,見下文,。
使用以下命令安裝mysql 5.6。
yum -y install ncurses-devel cmake
tar xf ~/mysql-5.6.37.tar.gz
cd ~/mysql-5.6.37
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.37 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_SSL=bundled -DWITH_DEBUG=0
make
make install
使用以下命令安裝mysql 5.7,。比上述多了最后一個boost相關(guān)設置項,,不設置此項可能會cmake失敗。
yum -y install ncurses-devel cmake
tar xf ~/mysql-5.7.19.tar.gz
cd ~/mysql-5.7.19
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.19 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_SSL=bundled -DWITH_DEBUG=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
make
make install
如果是centos7,,則加上一項-DWITH_SYSTEMD=1 ,,這會提供systemd腳本。
注意,,上述編譯選項中沒有提供sysconfdir,、datadir、pidfile和socket等mysql運行時文件類設置選項,。雖然可以設置,,但沒必要,而且在做多實例的時候可能會出現(xiàn)問題,。不過,,可以考慮加上MYSQL_UNIX_ADDR 項來設置socket路徑,因為不設置的話其會采用默認的/tmp/mysql.sock,。
1.3.2 初始化
shell> ln -s /usr/local/mysql-5.6.37 /usr/local/mysql
shell> cd /usr/local/mysql
shell> useradd -r -s /sbin/nologin mysql
shell> mkdir -p /mydata/data
shell> chown -R mysql.mysql /mydata/data
shell> chmod o-rx /mydata/data
shell> chown -R mysql.mysql /usr/local/mysql
shell> scripts/mysql_install_db --user=mysql --datadir=/mydata/data
shell> cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
shell> cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
shell> chown -R root.root /usr/local/mysql
# 修改my.cnf的datadir,、socket、log和pid路徑,。
shell> vim /etc/my.cnf
[mysqld]
datadir=/mydata/data
socket=/tmp/mysql.sock
[mysqld_safe]
log-error=/mydata/data/mysql.log
pid-file=/mydata/data/mysqld.pid
注:mysql 5.7建議采用如下語句進行初始化,。
/usr/local/mysql/bin/mysqld --initialize-insecure --datadir=/mydata/data --user=mysql
如果是centos7,則提供systemd風格的服務管理腳本,,并確認是否要修改pid文件路徑,。
1.3.3 規(guī)范化
輸出頭文件、庫文件,,設置PATH環(huán)境變量,,設置man路徑。
echo "export PATH=/usr/local/mysql/bin:$PATH" >/etc/profile.d/mysql.sh
source /etc/profile.d/mysql.sh
chmod +x /etc/profile.d/mysql.sh
echo "MANPATH /usr/local/mysql/man" >>/etc/man.config
echo "/usr/local/mysql/lib" > /etc/ld.so.conf.d/mysql.conf
ldconfig
ln -s /usr/local/mysql/include /usr/include/mysql
1.3.4 cmake編譯MySQL時的選項說明
Installation Layout Options
-DCMAKE_INSTALL_PREFIX=dir_name # MySQL的安裝位置
-DINSTALL_PLUGINDIR=dir_name # 插件安裝的目錄
-DMYSQL_DATADIR=dir_name # MySQL的data dir
-DSYSCONFDIR=dir_name # MySQL默認的配置文件(my.cnf)路徑
-DTMPDIR=dir_name # 臨時文件存放路徑,,在MySQL5.6.16中才開始提供該選項
Storage Engine Options
存儲引擎是插件式的,,可被靜態(tài)編譯到MySQL服務中,,也可以動態(tài)編譯成模塊,編譯成模塊時需要使用INSTALL PLUGIN 語句或者--plugin-load 選項來啟用,。但某些插件是固化的,,無法指定是靜態(tài)編譯還是動態(tài)編譯。
InnoDB,MyISAM,MERGE,MEMORY和CSV存儲引擎總是默認靜態(tài)編譯到MySQL服務中的,,在編譯安裝的時候無需顯式指定它們,。
編譯存儲引擎的時候,,使用-DWITH_enginename_STORAGE_ENGINE=1 表示靜態(tài)編譯到MySQL,。可選的引擎有:ARCHIVE,、BLACKHOLE,、EXAMPLE、FEDERATED,、PARTITION(分區(qū)支持引擎),、PERFSCHEMA(Performance Schema)。如:
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
使用-WITHOUT_enginename_STORAGE_ENGINE=1 表示顯式的排除這些引擎,,即強制不使用它們,。如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
-DWITH_enginename_STORAGE_ENGINE 和-WITHOUT_enginename_STORAGE_ENGINE 都沒有指定某些引擎的話,這些引擎默認動態(tài)編譯成模塊,,如果無法動態(tài)編譯成模塊則不編譯,。
Feature Options
-DDEFAULT_CHARSET=charset_name
設置默認字符集,默認為latin1,。例如,,binary,ascii,big5 ,gb2312,gbk,latin1,latin2,latin5,latin7,utf8。
在cmake/character_sets.cmake文件中的CHARSETS_AVAILABLE定義了允許使用的字符集列表,。
字符集的設置可以在MySQL服務啟動的時候使用"--character_set_server"選項來指定,。
-DDEFAULT_COLLATION=collation_name
設置默認的排序規(guī)則。默認排序規(guī)則為latin1_swedish_ci,。使用SHOW COLLATION 語句可以查看每種字符集可以使用的排序規(guī)則,。
排序規(guī)則的設置可以在MySQL服務啟動的時候使用--collation_server 選項來指定。
-DENABLED_LOCAL_INFILE=bool
Whether to enable LOCAL capability in the client library for LOAD DATA INFILE. This option controls client-side LOCAL capability, but the capability can be set on the server side at server startup with the --local-infile option.
-DMYSQL_TCP_PORT=port_num
指定MySQL的TCP端口,,默認是3306,。可以在啟動服務時使用--port選項指定,。
-DMYSQL_UNIX_ADDR=file_name
指定MySQL的套接字路徑,,必須是絕對路徑,默認是/tmp/mysql.sock,??梢栽趩臃諘r使用--port選項指定。
Whether to generate memcached shared libraries (libmemcached.so and innodb_engine.so).
2. mysql多實例配置
mysql可以實現(xiàn)多實例,但因為多實例會共用服務器資源,,導致資源爭用,,在某實例某一刻資源占用很多時(高并發(fā)、慢查詢),,其他的實例會受到影響,。
無論是rpm安裝、通用二進制安裝還是編譯安裝,,都有兩種方法實現(xiàn)多實例,。
- 共用配置文件
在my.cnf中配置多個"[mysqldN]",N是一個數(shù)字,,表示MySQL服務,。 啟停的時候使用mysqld_multi {start|stop|restart} N 。N可以是單個數(shù)字,,也可以是逗號分隔的多個數(shù)字,,還可以是短橫線表示的范圍數(shù)字。如果不是rpm包安裝的,,則mysqld_multi 文件的路徑在support-files中,,將其copy到/etc/init.d下即可(沒有原生態(tài)的systemd多實例服務管理腳本)。
mysqld_multi start 1,2,4-6
- 單獨的配置文件和啟動程序(推薦)
MySQL只需安裝一次,,即不同實例使用同一安裝程序,。但每個實例使用單獨的配置文件、服務管理腳本,、datadir目錄和socket,,并且啟停mysqld服務時需要指定套接字文件。
2.1 mysql多實例配置過程
本文介紹第二種方法,,并采用rpm包安裝的mysql實現(xiàn)多實例,。再次說明,無論使用何種方式安裝mysql,,都可以實現(xiàn)多實例,,其實看明白下面配置的過程就知道了。
創(chuàng)建并設置datadir,,并初始化,、分別提供配置文件。
shell> mkdir -p /mydata/{3306,3307}/data
shell> chown -R mysql.mysql /mydata/{3306,3307}/data
shell> mysql_install_db --datadir=/mydata/3306/data --user=mysql
shell> mysql_install_db --datadir=/mydata/3307/data --user=mysql
shell> cp /etc/my.cnf /mydata/3306/my.cnf
shell> cp /etc/my.cnf /mydata/3307/my.cnf
如果是設置mysql 5.7的多實例,,則初始化時使用如下命令替換上面的mysql_install_db ,。
shell> mysqld --initialize-insecure --datadir=/mydata/3306/data --user=mysql
shell> mysqld --initialize-insecure --datadir=/mydata/3307/data --user=mysql
分別修改兩個配置文件。
#以下是3306實例的配置文件要修改的部分,。
shell> vim /mydata/3306/my.cnf
[mysqld]
port=3306
datadir=/mydata/3306/data
socket=/mydata/3306/data/mysql.sock
server_id=1
[mysqld_safe]
log-error=/mydata/3306/data/mysqld.log
pid-file=/mydata/3306/data/mysqld.pid
#以下是3307實例的配置文件要修改部分,。
shell> vim /mydata/3307/my.cnf
[mysqld]
port=3307
datadir=/mydata/3307/data
socket=/mydata/3307/data/mysql.sock
server_id=2
[mysqld_safe]
log-error=/mydata/3307/data/mysqld.log
pid-file=/mydata/3307/data/mysqld.pid
2.2 提供sysV服務管理腳本
再分別提供服務管理腳本,。
- 以下是3306實例的管理腳本/etc/init.d/mysqld3306,內(nèi)容修改自原有管理腳本/etc/init.d/mysqld,。
- 由于我的示例中mysql是采用rpm安裝,,所以mysql的basedir為/usr,如果是編譯安裝或通用二進制安裝,,則對應修改下面腳本中的basedir變量,。
- 下面的datadir變量設置為/mydata/$port/data。請務必和上面的初始化設置和配置文件中設置的相同,。
- 將此管理腳本復制為/etc/init.d/mysqld3307,,再修改下port=3307即可作為3307實例的服務管理腳本。
- 此腳本不會初始化mysql(我把這部分代碼刪了)創(chuàng)建實例,,所以啟動服務前務必先初始化好對應的mysql實例,。
- 下面的腳本即可作為多實例服務管理腳本,也可以作為單實例服務管理腳本,,只需將腳本名稱改一改即可。
#!/bin/sh
#
# mysqld This shell script takes care of starting and stopping
# the MySQL subsystem (mysqld).
#
# chkconfig: 345 64 36
# description: MySQL database server.
# processname: mysqld
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
basedir=/usr
exec="$basedir/bin/mysqld_safe"
prog="mysqld"
port=3306
datadir="/mydata/$port/data"
socketfile="$datadir/mysql.sock"
errlogfile="$datadir/mysqld.log"
mypidfile="$datadir/mysqld.pid"
cnf="/mydata/$port/my.cnf"
# Set timeouts here so they can be overridden from /etc/sysconfig/mysqld
STARTTIMEOUT=120
STOPTIMEOUT=60
# Set in /etc/sysconfig/mysqld, will be passed to mysqld_safe
MYSQLD_OPTS=
[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
lockfile=/var/lock/subsys/$prog
case $socketfile in
/*) adminsocket="$socketfile" ;;
*) adminsocket="$datadir/$socketfile" ;;
esac
start(){
[ -x $exec ] || exit 5
# check to see if it's already running
RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1)
if [ $? = 0 ]; then
# already running, do nothing
action $"Starting $prog: " /bin/true
ret=0
elif echo "$RESPONSE" | grep -q "Access denied for user"
then
# already running, do nothing
action $"Starting $prog: " /bin/true
ret=0
else
# Now start service
$exec $MYSQLD_OPTS --defaults-file="$cnf" --datadir="$datadir" --socket="$socketfile" --pid-file="$mypidfile" --basedir="$basedir" --user=mysql >/dev/null &
safe_pid=$!
# Spin for a maximum of N seconds waiting for the server to come up;
# exit the loop immediately if mysqld_safe process disappears.
# Rather than assuming we know a valid username, accept an "access
# denied" response as meaning the server is functioning.
ret=0
TIMEOUT="$STARTTIMEOUT"
while [ $TIMEOUT -gt 0 ]; do
RESPONSE=$(/usr/bin/mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping 2>&1) && break
echo "$RESPONSE" | grep -q "Access denied for user" && break
if ! /bin/kill -0 $safe_pid 2>/dev/null; then
echo "MySQL Daemon failed to start."
ret=1
break
fi
sleep 1
let TIMEOUT=${TIMEOUT}-1
done
if [ $TIMEOUT -eq 0 ]; then
echo "Timeout error occurred trying to start MySQL Daemon."
ret=1
fi
if [ $ret -eq 0 ]; then
action $"Starting $prog: " /bin/true
touch $lockfile
else
action $"Starting $prog: " /bin/false
fi
fi
return $ret
}
stop(){
if [ ! -f "$mypidfile" ]; then
# not running; per LSB standards this is "ok"
action $"Stopping $prog: " /bin/true
return 0
fi
MYSQLPID=`cat "$mypidfile"`
if [ -n "$MYSQLPID" ]; then
/bin/kill "$MYSQLPID" >/dev/null 2>&1
ret=$?
if [ $ret -eq 0 ]; then
TIMEOUT="$STOPTIMEOUT"
while [ $TIMEOUT -gt 0 ]; do
/bin/kill -0 "$MYSQLPID" >/dev/null 2>&1 || break
sleep 1
let TIMEOUT=${TIMEOUT}-1
done
if [ $TIMEOUT -eq 0 ]; then
echo "Timeout error occurred trying to stop MySQL Daemon."
ret=1
action $"Stopping $prog: " /bin/false
else
rm -f $lockfile
rm -f "$socketfile"
action $"Stopping $prog: " /bin/true
fi
else
action $"Stopping $prog: " /bin/false
fi
else
# failed to read pidfile, probably insufficient permissions
action $"Stopping $prog: " /bin/false
ret=4
fi
return $ret
}
restart(){
stop
start
}
condrestart(){
[ -e $lockfile ] && restart || :
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p "$mypidfile" $prog
;;
restart)
restart
;;
condrestart|try-restart)
condrestart
;;
reload)
exit 3
;;
force-reload)
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?
使用下面的命令管理兩個實例:
service mysqld3306 {start|stop|status|restart}
service mysqld3307 {start|stop|status|restart}
第一次啟動可能會失敗,,也可能會警告和log相關(guān)的項,,這是正常的,之后都會正常,。
2.3 提供systemd服務管理腳本
- 以下是3306實例的管理腳本/usr/lib/systemd/system/mysqld3306.service,。
- 由于我的示例中mysql是采用rpm安裝,所以mysql的basedir為/usr,,如果是編譯安裝或通用二進制安裝,,則對應修改下面腳本中的basedir變量。
- 由于rpm包安裝在centos 7上,,已經(jīng)沒有
mysqld_safe 命令,,因此使用mysqld 來啟動mysql實例。
- 將此管理腳本復制為/usr/lib/systemd/system/mysqld3307.service,,再將其內(nèi)的3306修改為3307即可作為3307實例的服務管理腳本,。
- 此腳本不會初始化mysql(我把這部分代碼刪了)創(chuàng)建實例,所以啟動服務前務必先初始化好對應的mysql實例,。
- 下面的腳本即可作為多實例服務管理腳本,,也可以作為單實例服務管理腳本,只需將腳本名稱改一改即可,。
- mysql為systemd自帶了多實例服務管理腳本/usr/lib/systemd/system/[email protected],。我沒有采用,但其設置方法可以借鑒下,。
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev./doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=forking
PIDFile=/mydata/3306/data/mysqld.pid
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Start main service
ExecStart=/usr/sbin/mysqld --defaults-file=/mydata/3306/my.cnf --basedir=/usr --daemonize $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 5000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
然后重載下systemd服務管理腳本,。
systemctl daemon-reload
之后就可以使用下面的命令管理兩個實例:
systemctl {start|stop|status|restart} mysqld3306
systemctl {start|stop|status|restart} mysqld3307
3. mariadb安裝
mariadb基本上算是mysql的另一個實現(xiàn),,絕大多數(shù)以及基礎功能上和MySQL都相同。具體到安裝上,,也基本完全一樣,。
在centos7上,直接yum install mysql-server 將默認安裝mariadb,,如果配置了mysql的yum源,,需要指定"mysql-community-server"才表示安裝mysql。
以下僅提供mariadb的各項資源下載地址,,具體安裝方法見前文對應mysql安裝方法,。個人建議,將mariadb的服務啟動腳本閱讀一遍,,和MySQL的做個比較,。
mariadb的鏡像站點:
[mariadb]
name=mariadb
baseurl=http://yum./10.2.6/centos/6.6/$basearch/
#baseurl=http://yum./10.2.6/centos/7.2/$basearch/
enabled=1
gpgcheck=0
|