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的dasedir、datadir、conf等目录检查一遍,查看里面的文件是否都授权给mysql用户。
2、使用systemctl启动失败
查看系统日志
忘记创建目录了。所以查看系统日志,找ERROR就行啦。
解决方法:
mkdir /var/run/mysqldchown -R mysql:mysql /var/run/mysqld以上是我碰到的问题,其他都没什么大问题。
- centos 7 编译安装mysql5.7.20支持systemd及报错事项
- CentOS 编译安装 MySQL5.7
- CentOS 编译安装mysql5.6.22及设置远程连接
- CentOS编译安装Mysql5.6
- Centos 安装Mysql5.7
- centos安装mysql5.7
- centos安装mysql5.7
- CentOS 安装MySQL5.7
- centos mysql5.7安装
- centos 7 min 编译安装mysql5.6.20 笔记
- Centos编译安装PHP7+Nginx1.9+MySQL5.7
- Centos7.2 Systemd 方式编译 Mysql5.7.11
- CentOS 7 systemd 指令
- centos 7 Systemd Commands
- systemd详解(CentOS 7)
- Centos 5.5 编译安装Mysql5.5
- CentOS源码编译安装Mysql5.5
- RedHat/CentOS源码编译安装MySQL5.6.12
- 可变参数列表剖析
- js页面-未完待续
- 安装树莓派系统
- 软件测试--报告软件缺陷的基本原则
- 求先序遍历中第k个结点的值
- centos 7 编译安装mysql5.7.20支持systemd及报错事项
- C++——构造函数
- centos 7 安装mysql
- HDU
- 欢迎使用CSDN-markdown编辑器
- 改变计算技术的9个伟大算法
- 乱码
- Log4j
- 06 C++中类、函数、成员模板基本用法(学自Boolean)