centos 7 编译安装mysql5.7.20支持systemd及报错事项

来源:互联网 发布:微软人工智能解决方案 编辑:程序博客网 时间:2024/05/16 08:19

一、MYSQL的新特性及环境

1、性能更快3倍

2、新的优化器

3、原生的JSON支持

4、多源复制

5、GIS空间扩展

本次部署环境

Linux:CentOS Linux release 7.3.1611 (Core)

MYSQL版本:mysql-5.7.20

二、boost概述

boost是开源免费的第三方库,它是一个非常优秀的库,是C++标准的最好实践之一。

在这里讲使用boost库主要是在对mysql的数据备份时,将会使用的percona-xtrabackup需要用到boost库。

对mysql数据库的备份及其中的报错在我的另一篇文章记录。

三、编译安装

直接下载包

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.20.tar.gztar -xf mysql-boost-5.7.20.tar.gz

解决依赖问题

yum install -y cmake gcc-c++ ncurses-devel perl-Data-Dumper boost boost-doc boost-devel
创建用户、安装路径、数据存放路径、配置文件路径及授权(很重要)。

mkdir /usr/local/mysqlmkdir /usr/local/mysql/mydatamkdir /usr/local/mysql/confuseradd mysqlchown -R mysql:mysql /usr/local/mysql/
编译选项

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/mydata  \ -DSYSCONFDIR=/usr/local/mysql/conf \ -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all \ -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_DEBUG=0 -DMYSQL_MAINTAINER_MODE=0 \ -DWITH_SSL:STRING=bundled -DWITH_ZLIB:STRING=bundled \ -DWITH_SYSTEMD=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost

一定要使用boost,./boost表示是boost的存放路径

-DWITH_SYSTEMD=1 这是MySQL 5.7原生支持Systemd的选项,如果要是用systemctl启动,就必须开启。

在后面将对system的选项,进行解读,其他选项就不多解析。

make && make install
这里消耗的时间有点久,可以玩一会。

配置my.cnf文件

mv /etc/my.cnf /usr/local/mysql/conf/cd /usr/local/mysql/confvim my.cnf

改完my.cnf文件,一定要将文件属主改为mysql,否则启动不了

chown mysql:mysql my.cnf

根据my.cnf的配置,如上图,创建mysqld_safe所需的目录及授权。

mkdir /var/log/mysqldmkdir /var/run/mysqldchown -R mysql:mysql /var/log/mysqldchown -R mysql:mysql /var/run/mysqld

在 mysqld.service ,把默认的pid文件指定到了 /var/run/mysqld/ 目录,把默认的log文件指定到/var/log/mysql/目录(可自定义),而并没有事先建立该目录,因此要手动建立该目录并把权限赋给 mysql 用户。

对数据库的初始化。

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/mydata
详细过程:

[root@localhost support-files]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/mydata2017-11-10T17:27:54.190490Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).2017-11-10T17:27:56.972612Z 0 [Warning] InnoDB: New log files created, LSN=457902017-11-10T17:27:57.535329Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.2017-11-10T17:27:57.807244Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 7e5736cd-c63c-11e7-925d-000c29b8cbd5.2017-11-10T17:27:57.849665Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.2017-11-10T17:27:57.853497Z 1 [Note] A temporary password is generated for root@localhost: oldLEIN+P6Xi
注意:
[Note] A temporary password is generated for root@localhost: oldLEIN+P6Xi

此处的oldLEIN+P6Xi是数据库root的密码(请注意自己的密码,可以在日志中找到,或者使用跳过数据库授权,然后重置密码),第一次进入mysq将使用到。

测试是否能正常启动:

[root@localhost support-files]# pwd/usr/local/mysql/support-files[root@localhost support-files]# ./mysql.server start 

查看端口是否在监听:


说明已经编译成功了。

开始进入数据库:

刚才提到的oldLEIN+P6Xi要使用啦。




查看databases时,出现了问题:


提示已经告知我们要先修改root密码

mysql> set password = password('000000');
修改完毕即可正常使用了,剩下的就是设置systemd啦

四、mysql5.7支持原生的systemd

我是比较喜欢systemctl的启动方式,排错方便,简单明了。大笑大笑大笑

1、systemd是所有主要Linux发行版中可用的管理和配置平台。它提供了服务启动,停止,重新启动和其他一些新功能来管理服务的基础设施。

2、systemd是不是在init守护的不仅仅是名字,但也指它周围的整个软件包,其中,除了systemd的init守护进程,包括守护进程journald,logind和networkd,以及许多其他低级别的组件。

3、systemd的核心组件包括以下内容:

(1)systemd是Linux操作系统的系统和服务管理器。

(2)systemctl可用于反思和控制系统和服务管理器的状态。

(3)systemd-analysis可用于确定系统启动性能统计信息,并从系统和服务管理器中检索其他状态和跟踪信息。

4、systemd提供的主要功能之一是集成过程监控,并在发生服务故障/终止时自动重启。从MySQL 5.7开始,进程监视和自动重启现在由systemd在有系统的系统上处理。如果mysqld由于崩溃等可重启故障而失败,则systemd会自动重新启动mysqld。这就棒棒棒的。

5、mysqld.service:这是systemd服务定义文件,告诉它什么服务启动,指定自动重新启动设置,服务类型和所有各个单位之间的依赖关系,等等。这里是mysqld的内容。现在已经安装在Fedora 21的/ usr / lib / systemd / system下的服务文件:

6、mysql.conf:该文件描述配置设置,如tmp文件的位置,权限模式和所有权,与mysqld服务相关的tmpfiles的时代等等。例如,这个文件安装在Fedora 21上的/usr/lib/tmpfiles.d中

7、mysqld_pre_systemd:这是一个bash脚本文件,当mysqld第一次通过systemctl启动时,生成数据目录。这个脚本在启动mysqld之前由systemd运行,以检查指定的数据目录位置内是否存在正确的data / mysql目录。如果data / mysql目录不存在,那么systemd将运行mysqld并--initialize创建数据目录(这个文件通常安装在/ usr / bin中)。


查看是否存在mysqld.service,这是systemd的原生支持文件。

[root@localhost mysql-5.7.20]# find / -name mysqld.service/usr/local/src/mysql-5.7.20/scripts/mysqld.service/usr/local/mysql/usr/lib/systemd/system/mysqld.service
[root@localhost mysql]# pwd/usr/local/mysql[root@localhost mysql]# cd usr/lib/systemd/system/[root@localhost system]# lsmysqld.service  mysqld@.service

查看mysqld.service

[root@localhost system]# cat mysqld.service # Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.## This program is free software; you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation; version 2 of the License.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program; if not, write to the Free Software# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA## systemd service file for MySQL forking server#[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlType=forkingPIDFile=/var/run/mysqld/mysqld.pid# Disable service start and stop timeout logic of systemd for mysqld service.TimeoutSec=0# Execute pre and post scripts as rootPermissionsStartOnly=true# Needed to create system tablesExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd# Start main serviceExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS# Use this to switch malloc implementationEnvironmentFile=-/etc/sysconfig/mysql# Sets open_files_limitLimitNOFILE = 5000Restart=on-failureRestartPreventExitStatus=1PrivateTmp=false

将文件复制到/usr/lib/systemd/system/目录并授权

[root@localhost system]# cp mysqld.service /usr/lib/systemd/system/[root@localhost system]# chown 775 /usr/lib/systemd/system/mysqld.service 
使用systemctl启动mysql:



大功告成,嘻嘻!!!

五、编译遇到的报错

1、启动mysql失败

[root@localhost support-files]#  ./mysql.server startStarting MySQL.Logging to '/usr/local/mysql/mydata/node4.err'....... ERROR! The server quit without updating PID file (/usr/local/mysql/mydata/node4.pid).

如果直接将这个问题贴google或者百度,是没用的,最实在的还是查看日志。

[root@localhost backup]# cat /var/log/mysqld/mysqld.log171108 22:18:39 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/mydata171108 22:18:40 [Note] /usr/libexec/mysqld (mysqld 5.7.20.) starting as process 2413 ...171108 22:18:40 InnoDB: The InnoDB memory heap is disabled171108 22:18:40 InnoDB: Mutexes and rw_locks use GCC atomic builtins171108 22:18:40 InnoDB: Compressed tables use zlib 1.2.7171108 22:18:40 InnoDB: Using Linux native AIO171108 22:18:40 InnoDB: Initializing buffer pool, size = 128.0M171108 22:18:40 InnoDB: Completed initialization of buffer pool171108 22:18:40  InnoDB: Operating system error number 13 in a file operation.InnoDB: The error means mysqld does not have the access rights toInnoDB: the directory.InnoDB: File name ./ibdata1InnoDB: File operation call: 'open'.InnoDB: Cannot continue operation.171108 22:18:41 mysqld_safe mysqld from pid file /var/run/mysql/mysql.pid ended

重点来了:

InnoDB: The error means mysqld does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ibdata1
InnoDB: File operation call: 'open'.

InnoDB: Cannot continue operation.

这就说明是mysql用户无法打开某个文件,导致无法启动mysql。

解决方法:

将mysql的dasedir、datadir、conf等目录检查一遍,查看里面的文件是否都授权给mysql用户。

2、使用systemctl启动失败


查看系统日志


忘记创建目录了。所以查看系统日志,找ERROR就行啦。

解决方法:

mkdir /var/run/mysqldchown -R mysql:mysql /var/run/mysqld
以上是我碰到的问题,其他都没什么大问题。


原创粉丝点击