MySQL Archives → 選 5.5 版本 → Linux Generic (glibc 2.12+) x86_64 tar.gz
#!/bin/bash
MYSQL_BASE=/opt/mysql
MYSQL_VER=5.5.62
GROUP=mysql
USER=mysql
groupadd $GROUP
useradd -r -g $GROUP -s /bin/bash -m -d $MYSQL_BASE $USER
mkdir -p $MYSQL_BASE/product/$MYSQL_VER
mkdir -p $MYSQL_BASE/mysqldata
mkdir -p $MYSQL_BASE/mysqllog
mkdir -p /var/run/mysqld
chown -R $USER:$GROUP $MYSQL_BASE
chown -R $USER:$GROUP /var/run/mysqld
chmod 755 $MYSQL_BASE
tar -xzf mysql-$MYSQL_VER-linux-glibc2.12-x86_64.tar.gz -C $MYSQL_BASE/product/$MYSQL_VER --strip-components=1
ln -s $MYSQL_BASE/product/$MYSQL_VER /usr/local/mysql
export MYSQL_BASE=/opt/mysql
export MYSQL_VER=5.5.62
export BASEDIR=$MYSQL_BASE/product/$MYSQL_VER
export DATADIR=$MYSQL_BASE/mysqldata
export PATH=$BASEDIR/bin:$PATH
export LD_LIBRARY_PATH=$BASEDIR/lib:$LD_LIBRARY_PATH
source /etc/profile.d/mysql.sh
mysql soft nproc 65535
mysql hard nproc 65535
mysql soft nofile 65535
mysql hard nofile 65535
/etc/pam.d/login 確保有 session required pam_limits.so。
cd $BASEDIR/scripts
./mysql_install_db --basedir=$BASEDIR --datadir=$DATADIR --user=$USER
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set = utf8mb4
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /opt/mysql/product/5.5.62
datadir = /opt/mysql/mysqldata
tmpdir = /tmp
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 連線
max_connections = 1000
max_connect_errors = 100000
connect_timeout = 10
wait_timeout = 600
interactive_timeout = 600
skip-name-resolve
lower_case_table_names = 1
# 緩衝區
key_buffer_size = 32M
table_open_cache = 2000
thread_cache_size = 64
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
join_buffer_size = 2M
bulk_insert_buffer_size = 64M
# InnoDB 核心 (按記憶體調整,假設 8GB 記憶體)
innodb_buffer_pool_size = 4G
innodb_log_file_size = 512M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 16M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_thread_concurrency = 0
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_io_capacity = 2000
innodb_max_dirty_pages_pct = 75
# Binlog
log-bin = /opt/mysql/mysqllog/mysql-bin
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 500M
# 慢查詢
slow_query_log = 1
slow_query_log_file = /opt/mysql/mysqllog/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
# 錯誤日誌
log-error = /opt/mysql/mysqllog/error.log
[mysqldump]
quick
max_allowed_packet = 64M
[mysql]
auto-rehash
default-character-set = utf8mb4
# mysqld_safe 尋找 /usr/local/mysql/bin/mysqld
ln -s $BASEDIR/bin/mysqld /usr/local/mysql/bin/mysqld
# mysql_secure_installation 找 socket
ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
[Unit]
Description=MySQL Server 5.5
After=network.target
[Service]
Type=forking
User=mysql
Group=mysql
ExecStart=/opt/mysql/product/5.5.62/bin/mysqld_safe --defaults-file=/etc/my.cnf
ExecStop=/opt/mysql/product/5.5.62/bin/mysqladmin shutdown
PIDFile=/var/run/mysqld/mysqld.pid
TimeoutSec=300
Restart=on-failure
LimitNOFILE=65535
LimitNPROC=65535
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
# 測試連線
mysql -u root -p -S /var/run/mysqld/mysqld.sock
# 修正 mysql_secure_installation 讀取 defaults-file 問題
sed -i 's/--defaults-file=/--defaults-extra-file=/' $BASEDIR/bin/mysql_secure_installation
$BASEDIR/bin/mysql_secure_installation
只需修改 /usr/local/mysql 軟連結指向新版本目錄,更新 my.cnf basedir,重啟服務即可。