最近这段时间,在看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= -DWITH_INNOBASE_STORAGE_ENGINE= -DWITH_ARCHIVE_STORAGE_ENGINE= -DWITH_BLACKHOLE_STORAGE_ENGINE= -DWITH_MEMORY_STORAGE_ENGINE= -DDOWNLOAD_BOOST= -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//data/ --pid-file=/data/mysql57//tmp/3307_pid --socket=/data/mysql57//tmp/3307_socket

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

--05T00::.891294Z  [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//data
MYCNF=/data/mysql57//my.cnf
PORT=
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 ]
then
echo "The MYSQL SERVER is running"
else
if [ -x $MYSQL_BIN ] && [ -f $MYCNF ]
then
$MYSQL_BIN --defaults-file=$MYCNF & >>/tmp/mysql.log >&
echo $? >> /tmp/mysql.log
sleep [ `ps -ef|grep "port=$PORT"|grep -v grep|wc -l` -ge ] && 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 ]
then
echo "The MYSQL SERVER is not running"
else
$MYSQLADMIN -S $SOCKET shutdown
ps -ef|grep "port=$PORT"|grep -v grep|wc -l
[ $? -eq ] && action "THE MYSQL SERVER STOPPING" /bin/true || action "THE MYSQL SERVER STOPPING" /bin/false
fi
} main(){
if [ $# -ne ]
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
--09T01::.096443Z mysqld_safe mysqld from pid file /data/mysql57//tmp/3307_pid ended 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
--09T01::.379632Z mysqld_safe Logging to '/data/mysql57/3307/data/Server129.err'.
--09T01::.411184Z mysqld_safe Starting mysqld daemon with databases from /data/mysql57//data
THE MYSQL SERVER STARTING [ OK ]
[root@Server129 bin]# sh mysql_server.sh stop
--09T01::.241711Z mysqld_safe mysqld from pid file /data/mysql57//tmp/3307_pid ended THE MYSQL SERVER STOPPING [ OK ]
[root@Server129 bin]# sh mysql_server.sh start
--09T01::.846842Z mysqld_safe Logging to '/data/mysql57/3307/data/Server129.err'.
--09T01::.878461Z mysqld_safe Starting mysqld daemon with databases from /data/mysql57//data
THE MYSQL SERVER STARTING [ OK ]
[root@Server129 bin]#

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

  今天又考虑一下这个脚本,当多个地址,使用相同的端口时候,这个脚本就不好用了,下面想着另外的一个判断条件,IP:PORT,每个实例都是唯一的,所以这个方法就可以了。

#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
BASEDIR=/app/mysql
BINDIR=$BASEDIR/bin
MYSQL_BIN=$BINDIR/mysqld_safe
MYSQLADMIN=/usr/local/mysql/bin/mysqladmin
HOMEDIR=/data/mysql57/
DATADIR=$HOMEDIR/data
MYCNF=$HOMEDIR/my.cnf
DEV=eth0
IP=`ip addr|grep -E "$DEV\$"|grep inet|awk '{print $2}'|cut -d '/' -f `
PORT=
SOCKET=`grep socket $MYCNF|grep $HOMEDIR|awk '{print $3}'` usage(){
echo "$0 usage: {start|stop|reload}"
} #[[ "`netstat -ltnup|grep mysqld|awk '{print $4}'`" == "$IP:$PORT" ]] mysqld_start(){
if [ "`netstat -ltnup|grep "$IP:$PORT"|wc -l`" -eq ]
then
echo "The MYSQL SERVER is running"
else
if [ -x $MYSQL_BIN ] && [ -f $MYCNF ]
then
$MYSQL_BIN --defaults-file=$MYCNF & >>/tmp/mysql.log >&
echo $? >> /tmp/mysql.log
sleep [ "`netstat -ltnup|grep "$IP:$PORT"|wc -l`" -eq ] && 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 [ "`netstat -ltnup|grep "$IP:$PORT"|wc -l`" -eq ]
then
echo "The MYSQL SERVER is not running"
else
$MYSQLADMIN -S $SOCKET shutdown [ "`netstat -ltnup|grep "$IP:$PORT"|wc -l`" -eq ] && action "THE MYSQL SERVER STOPPING" /bin/true || action "THE MYSQL SERVER STOPPING" /bin/false
fi
} main(){
if [ $# -ne ]
then
usage
else
case "$1" in
'start')
mysqld_start
;;
'stop')
mysqld_stop
;;
'reload')
mysqld_stop
mysqld_start
;;
*)
usage
esac
fi
} main $*

mysql 5.7 启动脚本的更多相关文章

  1. 编写mysql多实例启动脚本

    脚本原理: 启动MySQL动作: mysqld_safe来执行启动 停止MySQL动作: 使用mysqladmin来执行停止动作 重启的MySQL动作:    原理就是先停止,然后再启动 但是要注意: ...

  2. MySQL的启动脚本

    MySQL的启动脚本#!/bin/bashmysql_port=3308mysql_username="admin"mysql_password="password&qu ...

  3. MySQL 多实例启动和关闭脚本

    DB: 5.5.14 OS:CentOS 6.3 在MySQL多实例中,一个一个启动灰常麻烦,因此写个简单的启动和关闭脚本 启动脚本:start.sh #!/bin/bash for port in ...

  4. mysql 5.6 windows 启动脚本

    2018-4-25 17:02:08 星期三 下载mysql 5.6 zip(免安装版)到本机 一台电脑上可能装有多个版本的mysql, 启动时为了不影响: 1. 解压后文件夹根目录改名为 mysql ...

  5. 问题:mysql服务正在启动 mysql服务无法启动 && mysql启动脚本 mysql关闭脚本

    此篇目编写两个核心目的: 1.mysql服务启动脚本(start_mysql.bat),mysql服务停止脚本(stop_mysql.bat)的讲解. 2.解决问题:mysql服务无法启动. 操作流程 ...

  6. mysql的启动脚本mysql.server及示例配置文件

    以MySQL-server-4.0.14-0.i3862881064151.rpm为例,放在/data目录下 cd /data rpm -ivh MySQL-server-4.0.14-0.i386. ...

  7. [shell脚本] mysql服务启动脚本

    服务启动脚本(初始化.启动.登录) #!/bin/bash export PID=/usr/local/nestdb_master/bin/mysqld export PASSWORD=123456 ...

  8. 绿色mysql启动脚本

    启动脚本如下:./mysqld_safe --defaults-file=/export/servers/mysql-5.5.38/my.cnf --ledir=/export/servers/mys ...

  9. MySQL慢日志监控脚本实例剖析

    公司线上的 MySQL 慢日志,之前一直没有做好监控.趁着上周空闲,我就把监控脚本写了下,今天特地把代码发出来与51博友分享一下. 针对脚本的注解和整体构思,我会放到脚本之后为大家详解. 1 2 3 ...

随机推荐

  1. zh-CN、zh-Hans区别

    zh-CN:地区限制匹配规范,表示用在中国大陆区域的中文.包括各种大方言.小方言.繁体.简体等等都可以被匹配到. zh-Hans:语言限制匹配规范,表示简体中文.适用区域范围是全宇宙用中文简体的地方, ...

  2. 如何安装或卸载Lodop、C-Lodop

    安装:下载.exe安装文件,一步步安装就行,如不特意拦截,应该是100%可以安装成功.客户端本地打印角色等,直接一步步安装就行,如果是广域网AO打印那种,在服务器上安装的c-lodop,需要勾选服务器 ...

  3. hdu 5652(并查集)

    题意:很久之前,在中国和印度之间有通路,通路可以简化为一个n*m的字符串,0表示能通过,1表示障碍,每过一年就有一个坐标变成1,问你什么时候,通路彻底无法通过: 解题思路:无向图的连通性,一般直接搜索 ...

  4. UVA 690 Pipeline Scheduling

    https://vjudge.net/problem/UVA-690 题目 你有一台包含5个工作单元的计算机,还有10个完全相同的程序需要执行.每个程序需要$n(n<20)$个时间片来执行,可以 ...

  5. BZOJ4482[Jsoi2015]套娃——贪心+set

    题目描述 [故事背景] 刚从俄罗斯旅游回来的JYY买了很多很多好看的套娃作为纪念品!比如右 图就是一套他最喜欢的套娃J.JYY由于太过激动,把所有的套娃全 部都打开了.而由于很多套娃长得过于相像,JY ...

  6. Android 自定义ListView 修改数据

    当我们修改了 自定义ListView,如何更新界面上的控件呢? 两种方法: 1 重新绑定adapter (不推荐) Adapter_InboundPO adapter =(Adapter_Inboun ...

  7. 洛谷P3183食物链题解

    不得不说,这是道很难减少时间复杂度的题,且这个题有点像一道拓扑排序题,但是这个难度标签有点低. 我们应该可以想到拓扑排序可能是这个题的正解,但是题目中有输出总数,因此我们就可以造一个数组表示从这个点出 ...

  8. Django+Xadmin打造在线教育系统(四)

    完成授课机构的功能 模板继承 在templates目录下,新建base.html,剪切org-list.html内容到里面 编写org-list.html内容 继承base.html,将里面的面包屑和 ...

  9. Appium-desktop安装启用Inspector一直报错An unknown server-side error occurred...

    遇到的问题是: 启用Appium-desktop的Inspector一直报错:An unknown server-side error occurred while processing the co ...

  10. 【XSY2469】graph 分治 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...