mysql 5.7 启动脚本_MySQL数据库 5.7 启动脚本

本文主要向大家介绍了MySQL数据库 5.7 启动脚本,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助。

最近这段时间,在看mysql,安装了,也应用过,对于生产环境中,一般都选择使用source code安装,在安装的时候可以自定义相关路径和内容,对于生产环境来说更有效。相对于mysql 5.5的安装,mysql 5.7的安装大同小异,唯一的区别是5.7在安装的时候,需要一个组件,boost,而且必须是1.59,版本高了也不行,所以下载的时候要注意。

在mysql官网下载的时候,提供两种source code,一种是带boost的,直接编译安装即可,一种是不带boost的,需要自己下载boost来安装。我们选择使用不带boost的版本,下载boost之后,将boost拷贝到/usr/local/boost目录下,然后对mysql源码进行解压编译。编译的代码为:

cmake .. -DCMAKE_INSTALL_PREFIX=/app/mysql_5.7.22 -DMYSQL_DATADIR=/app/mysql_5.7.22/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

整个编译的过程是很长的,默认情况下,编译的时候有指定basedir和datadir,这两个路径是默认的,在后续数据库初始化的过程中,可以对不同的情况再定义。编译完成后,就可以make && make install了。

如果是带boost的源码,也要指定DWITH_BOOST=../boost,这个是相对路径

安装完成后,需要对数据库进行初始化,这个时候,可以设定初始化的datadir,后期的数据库就应用在这个目录中。在初始化过程中,相比于5.5有点区别,5.5初始化完成后,默认登录数据库是不需要密码的。而在5.7,--initialize-insecure 和--initialize有两个option,这两个属性有一个区别,就是在initialize时候,会为root@localhost生成一个随机密码,该密码会写到数据库日志中,通过grep log就可以得到该密码,然后在登录的时候使用该密码,登录进去之后,通过update进行修改,而--initialize-insecure在初始化的时候,跟5.5一样,不会用root用户生成密码,直接空密码就可以登录。

./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

初始化的时候,指定了pid、socket等文件位置,默认直接会在data目录下,生成一个以主机名命名的log文件,在初始化的时候,直接在屏幕上输出了一段话,表示没有密码。

2018-07-05T00:14:59.891294Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

还是要注意,在整个mysql的basedir和datadir下,文件的属主和数组都要是mysql启动用户,也就是mysql.mysql。

由于是自定义源码安装,mysql的启动脚本就没法直接用了,想着自己写一个脚本,来控制这个mysql5.7的启动和停止。下面是代码内容。

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}"

}

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

[ `ps -ef|grep "port=$PORT"|grep -v grep|wc -l` -ge 1 ] && action  "THE MYSQL SERVER STARTING" /bin/true || action  "THE MYSQL SERVER STARTING" /bin/false

else

echo " MISSING STARTUP_CONFIG,PLEASE CHECK THE CONFIG IN $MYCNF"

fi

fi

}

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

ps -ef|grep "port=$PORT"|grep -v grep|wc -l

[ $? -eq 0 ] && action "THE MYSQL SERVER STOPPING" /bin/true || action  "THE MYSQL SERVER STOPPING" /bin/false

fi

}

main(){

if [ $# -ne 1 ]

then

usage

else

case "$1" in

‘start‘)

mysqld_start

;;

‘stop‘)

mysqld_stop

;;

‘reload‘)

mysqld_stop

mysqld_start

;;

*)

usage

esac

fi

}

main $*

在这段代码中,基本上都是很普通的启动和停止功能,判断是否启动,是根据进程来区分的,基于配置文件中的内容进行判断,另外,由于mysql在启动的时候有延时,不能启动了立即判断是否有进程,所以需要在启动脚本的时候进行sleep,一般2秒就足够。下面测试一下脚本的可用性。

[root@Server129 bin]# sh mysql_server.sh stop

2018-07-09T01:33:11.096443Z mysqld_safe mysqld from pid file /data/mysql57/3307/tmp/3307_pid ended

0

THE MYSQL SERVER STOPPING                                  [  OK  ]

[root@Server129 bin]# sh mysql_server.sh stop

The MYSQL SERVER is not running

[root@Server129 bin]# sh mysql_server.sh reload

The MYSQL SERVER is not running

2018-07-09T01:33:22.379632Z mysqld_safe Logging to ‘/data/mysql57/3307/data/Server129.err‘.

2018-07-09T01:33:22.411184Z mysqld_safe Starting mysqld daemon with databases from /data/mysql57/3307/data

THE MYSQL SERVER STARTING                                  [  OK  ]

[root@Server129 bin]# sh mysql_server.sh stop

2018-07-09T01:33:30.241711Z mysqld_safe mysqld from pid file /data/mysql57/3307/tmp/3307_pid ended

0

THE MYSQL SERVER STOPPING                                  [  OK  ]

[root@Server129 bin]# sh mysql_server.sh start

2018-07-09T01:33:33.846842Z mysqld_safe Logging to ‘/data/mysql57/3307/data/Server129.err‘.

2018-07-09T01:33:33.878461Z mysqld_safe Starting mysqld daemon with databases from /data/mysql57/3307/data

THE MYSQL SERVER STARTING                                  [  OK  ]

[root@Server129 bin]#

基本功能貌似都很合理,但是有一些确定,比如在启动的时候,这些脚本输出,如何不让显示。

本文由职坐标整理并发布,希望对同学们学习MySQL有所帮助,更多内容请关注职坐标数据库MySQL数据库频道!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值