生產環境常需在單機部署多個 MySQL 實例(不同端口、數據目錄、配置)。本文提供一鍵部署腳本,支援自定義 basedir、datadir、端口、server_id,解決初始化常見報錯。
groupadd mysql useradd -r -g mysql -s /bin/false mysql cd /usr/local tar zxvf mysql-VERSION-OS.tar.gz ln -s full-path mysql cd mysql chown -R mysql . chgrp -R mysql . scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql data bin/mysqld_safe --user=mysql &
用法:sh 4.sh /path/mysql.tar.gz /mysql3306 3306
#!/bin/bash
filename=$1; basedir=$2; port=$3
groupadd mysql; useradd -r -g mysql -s /bin/false mysql
cd /usr/local; tar zxvf $filename
file=`basename $filename`; dir=`dirname $filename`
after_tar_file=${file:0:-7}
mv $after_tar_file mysql"$port"; cd mysql"$port"
cp $dir/my.cnf ./my"$port".cnf
user_cnf=my"$port".cnf
# 路徑替換技巧:將 / 先換為 | 再 sed 再換回
basedir_new=${basedir/\//|}
sed -i "s/\/project\/class2/$basedir_new/g" $user_cnf
sed -i "s/|/\//g" $user_cnf
# 動態 server_id 與端口
sed -i "/^server_id/s/.*/server_id=\"`date +%s`\"/" $user_cnf
sed -i "/^port/s/.*/port=\"$port\"/" $user_cnf
mkdir -p "$basedir"/mysql/{run,data,share,log,tmp}
chown -R mysql $basedir; chgrp -R mysql $basedir
cp share/english/errmsg.sys "$basedir"/mysql/share/
scripts/mysql_install_db --user=mysql --defaults-file="$user_cnf" --force
bin/mysqld_safe --defaults-file="$user_cnf" --user=mysql &
| 錯誤 | 原因 | 解決 |
|---|---|---|
| Neither host 'x' nor 'localhost' could be looked up | hostname 解析失敗 | 加 --force 或修正 /etc/hosts |
| Can't find messagefile '.../errmsg.sys' | basedir 變更導致 share 路徑錯 | 手動拷貝 share/english/errmsg.sys 到新 share 目錄 |
ulimit -n 65535、vm.swappiness=1/etc/rc.local 或 systemd 服務