而在生产环境中,MySQL 5.7版本的稳定性和性能备受青睐
然而,要想充分利用MySQL 5.7的强大功能,首先需要掌握其启动和停止的机制
本文将详细介绍如何编写MySQL 5.7的启动脚本,以便有效地管理数据库服务
一、MySQL 5.7的安装与初始化 在编写启动脚本之前,确保MySQL 5.7已经正确安装并初始化
MySQL 5.7的安装过程相比之前的版本略有不同,特别是需要注意boost组件的依赖
1.下载源码: t- MySQL官网提供了两种源码包:一种是包含boost的,另一种是不包含的
为了灵活性,建议选择不包含boost的版本,自行下载并配置boost 1.59版本(注意版本兼容性)
2.编译安装: t- 将下载的boost解压并放置在指定目录(如/usr/local/boost)
t解压MySQL源码包,并进入源码目录
t- 使用cmake进行配置,指定安装路径、数据目录、字符集等参数
例如: tbash tcmake .. -DCMAKE_INSTALL_PREFIX=/app/mysql_5.7.22 t-DMYSQL_DATADIR=/app/mysql_5.7.22/data t-DDEFAULT_CHARSET=utf8 t-DDEFAULT_COLLATION=utf8_general_ci t-DMYSQL_USER=mysql t-DWITH_MYISAM_STORAGE_ENGINE=1 t-DWITH_INNOBASE_STORAGE_ENGINE=1 t-DWITH_ARCHIVE_STORAGE_ENGINE=1 t-DWITH_BLACKHOLE_STORAGE_ENGINE=1 t-DWITH_MEMORY_STORAGE_ENGINE=1 t-DDOWNLOAD_BOOST=1 t-DWITH_BOOST=/usr/local/boost t t- 编译并安装:make && make install
3.初始化数据库: t- MySQL 5.7在初始化时提供了`--initialize`和`--initialize-insecure`两个选项
tt+`--initialize`:会为root用户生成一个随机密码,该密码会记录在数据库日志中
tt+`--initialize-insecure`:不会生成root用户密码,允许空密码登录(不推荐用于生产环境)
t初始化命令示例: tbash t./mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql57/3307/data/ --pid-file=/data/mysql57/3307/tmp/3307_pid --socket=/data/mysql57/3307/tmp/3307_socket t t- 注意:初始化完成后,应检查并确保数据目录和日志文件的属主是mysql用户
二、编写启动脚本 由于MySQL 5.7是通过源码安装的,系统自带的启动脚本可能不适用
因此,需要编写自定义的启动脚本来管理MySQL服务
1.脚本内容: 以下是一个示例脚本,用于启动和停止MySQL 5.7服务
该脚本基于bash编写,适用于Linux系统
bash !/bin/bash 定义变量 BASEDIR=/app/mysql BINDIR=$BASEDIR/bin MYSQL_BIN=$BINDIR/mysqld_safe MYSQLADMIN=/usr/local/mysql/bin/mysqladmin 注意:根据实际情况修改路径 DATADIR=/data/mysql57/3307/data MYCNF=/data/mysql57/3307/my.cnf PORT=3307 SOCKET=$(grep socket $MYCNF | grep $PORT | awk{print $3}) 使用说明 usage(){ echo $0 usage:{start|stop|reload} } 启动MySQL服务 mysqld_start(){ if【$(ps -ef | grep port=$PORT | grep -v grep | wc -l) -ge 1】; then echo The MYSQL SERVER is running else if【 -x $MYSQL_BIN】 &&【 -f $MYCNF】; then $MYSQL_BIN --defaults-file=$MYCNF & 1]/tmp/mysql.log 2>&1 echo $? ] /tmp/mysql.log sleep 2 if【$(ps -ef | grep port=$PORT | grep -v grep | wc -l) -ge 1】; then action THE MYSQL SERVER STARTING /bin/true else action THE MYSQL SERVER STARTING /bin/false fi else echo MISSING STARTUP_CONFIG, PLEASE CHECK THE CONFIG IN $MYCNF fi fi } 停止MySQL服务 mysqld_stop(){ if【$(ps -ef | grep port=$PORT | grep -v grep | wc -l) -lt 1】; then echo The MYSQL SERVER is not running else $MYSQLADMIN -S $SOCKET shutdown if【$(ps -ef | grep port=$PORT | grep -v grep | wc -l) -eq 0】; then action THE MYSQL SERVER STOPPING /bin/true else action THE MYSQL SERVER STOPPING /bin/false fi fi } 主函数 main(){ if【$# -ne 1】; then usage else case $1 in start)