1. 程式人生 > >centos 7 編譯安裝mysql5.7.20支援systemd及報錯事項

centos 7 編譯安裝mysql5.7.20支援systemd及報錯事項

一、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.gz
tar -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/mysql
mkdir /usr/local/mysql/mydata
mkdir /usr/local/mysql/conf
useradd mysql
chown -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/conf
vim my.cnf

改完my.cnf檔案,一定要將檔案屬主改為mysql,否則啟動不了
chown mysql:mysql my.cnf

根據my.cnf的配置,如上圖,建立mysqld_safe所需的目錄及授權。

mkdir /var/log/mysqld
mkdir /var/run/mysqld
chown -R mysql:mysql /var/log/mysqld
chown -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
詳細過程:
[[email protected] support-files]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/mydata
2017-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=45790
2017-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 [email protected]: oldLEIN+P6Xi
注意:
[Note] A temporary password is generated for [email protected]: oldLEIN+P6Xi

此處的oldLEIN+P6Xi是資料庫root的密碼(請注意自己的密碼,可以在日誌中找到,或者使用跳過資料庫授權,然後重置密碼),第一次進入mysq將使用到。

測試是否能正常啟動:

[[email protected] support-files]# pwd
/usr/local/mysql/support-files
[[email protected] 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的原生支援檔案。

[[email protected] 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
[[email protected] mysql]# pwd
/usr/local/mysql
[[email protected] mysql]# cd usr/lib/systemd/system/
[[email protected] system]# ls
mysqld.service  [email protected]

檢視mysqld.service

[[email protected] 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 Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql

Type=forking

PIDFile=/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 root
PermissionsStartOnly=true

# Needed to create system tables
ExecStartPre=/usr/local/mysql/bin/mysqld_pre_systemd

# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS

# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

# Sets open_files_limit
LimitNOFILE = 5000

Restart=on-failure

RestartPreventExitStatus=1

PrivateTmp=false
將檔案複製到/usr/lib/systemd/system/目錄並授權
[[email protected] system]# cp mysqld.service /usr/lib/systemd/system/
[[email protected] system]# chown 775 /usr/lib/systemd/system/mysqld.service 
使用systemctl啟動mysql:



大功告成,嘻嘻!!!

五、編譯遇到的報錯

1、啟動mysql失敗

[[email protected] support-files]#  ./mysql.server start
Starting MySQL.Logging to '/usr/local/mysql/mydata/node4.err'.
...... ERROR! The server quit without updating PID file (/usr/local/mysql/mydata/node4.pid).

如果直接將這個問題貼google或者百度,是沒用的,最實在的還是檢視日誌。

[[email protected] backup]# cat /var/log/mysqld/mysqld.log
171108 22:18:39 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/mydata
171108 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 disabled
171108 22:18:40 InnoDB: Mutexes and rw_locks use GCC atomic builtins
171108 22:18:40 InnoDB: Compressed tables use zlib 1.2.7
171108 22:18:40 InnoDB: Using Linux native AIO
171108 22:18:40 InnoDB: Initializing buffer pool, size = 128.0M
171108 22:18:40 InnoDB: Completed initialization of buffer pool
171108 22:18:40  InnoDB: Operating system error number 13 in a file operation.
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.
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/mysqld
chown -R mysql:mysql /var/run/mysqld
以上是我碰到的問題,其他都沒什麼大問題。

相關推薦

centos 7 編譯安裝mysql5.7.20支援systemd事項

一、MYSQL的新特性及環境 1、效能更快3倍 2、新的優化器 3、原生的JSON支援 4、多源複製 5、GIS空間擴充套件 本次部署環境 Linux:CentOS Linux release 7.3.1611 (Core) MYSQL版本:mysql-5.7.20 二、b

Centos7系統編譯安裝Mysql5.7.21

mysql centos7環境說明 :centos7.4 64位虛擬機 mysql5.7.21.tar.gz 編譯安裝需要虛擬機2G內存[root@localhost ~]# uname -aLinux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tu

源碼編譯安裝Mysql5.7版本

源碼編譯 Mysql5.7版本1、源碼編譯安裝mysql(5.7版本) 下載地址:https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz#(MySQL從5.7版本之後,boost是必須的,建議把系統自帶的boost庫卸載,源碼編

centos7.2編譯安裝mysql5.7.21解決

initial mem ext ava gin onf 改密 依賴 document 編譯安裝mysql 安裝環境安裝包[root@ecs-adfa ~]# ls /root/tools/app.tar.gz mysql-5.7.21 mysql-5.7.21.tar.

在CentOS7中手工編譯安裝Mysql5.7

可能 文件 lac val mysql5.7 welcome hole 開啟 names 在CentOS7中手工編譯安裝Mysql5.7 實驗介紹:由於Mysql自從5.5之後,都需要安裝boost的函數庫,所以和LAMP中編譯安裝Mysql略有不同,配置文件也不一樣,下面

手工編譯安裝Mysql5.7

設置環境變量 存儲 esp grep dem gis 添加 啟動 mua MySQL是一個多線程、多用戶的SQL數據庫服務,具有高性能、高可靠和易於使用的特性,為了確保MySQL數據庫的完整性、可定制性,這裏我會采用手工編譯的方式來安裝。 MySQL5.7源碼包鏈接:htt

Ubuntu18.04編譯安裝mysql5.7.23

size https tst 源碼 don 解析 truncate 保存 compiler 本博客為源碼安裝mysql5.7.23案例全過程 環境ubuntu18.04 安裝規劃: 配置文件:/etc/my.cnf 數據目錄:/r2/mysqldata 安裝目錄:/usr/

CentOS7編譯安裝MySQL5.7.24

目錄 安裝依賴 安裝boost 編譯安裝MySQL 配置 登入MySQL,修改密碼 安裝依賴 (1)cmake是新版MySQL的編譯工具 sudo yum install gcc gcc-c++ pcre pcre-devel openssl openssl-devel s

centos 6 yum 安裝 mysql5.7

下載配置mysql yum源 wget https://dev.mysql.com/get/mysql57-community-release-el6-9.noarch.rpm rpm -Uvh mysql57-community-release-el6-9.noarch.rpm 安裝

CentOS7 離線編譯安裝Mysql5.7

First 下載Mysql-5.7的rpm-bundle版本,並使用xftp或者flashftp等工具上傳到CentOS上 Second tar xvf mysql-5.7.23-1.el7.x86

centos下RPM安裝mysql5.7.13

1、檢視已有mysql rpm -qa | grep mysql 2、解除安裝 #yum -y remove mysql-libs-5.1.66-2.el6_3.x86_64 檢查並刪除老版本mysql的開發標頭檔案和庫       命令:#rm -fr /usr/

編譯安裝mysql5.7.24踩的坑

#The MySQL client [client] port=3306 socket=/mysqldata/3306/mysql.sock #default-charcter-set=utf8 #The MySQL server [mysqld] port=3306 user=mys

CentOS 7.5安裝MySQL5.7.24

本文適用CentOS 7.5 1、下載mysql 5.7 的rpm wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm 2、 yum -y install mysql57-communit

RHEL7 編譯安裝mysql5.7

 1、安裝基本服務               yum -y install gcc-c++ ncurses-devel cmake 2、將boost軟

CentOS編譯安裝VIM 7.3

在 CentOS 中編譯安裝 VIM 7.3 預設安裝的 Vim 不帶有多字元支援,所以不支援中文。無論是將 CentOS 本來的語系改為中文還是將 Vim 的語系設定改為中文,都不能正常顯示中文。為了在 Vim 中能夠正常處理中文,我們需要在編譯時指定 —enable-

Centos6編譯安裝Mysql5.7.18, rpm 安裝mysql5.7.18,ubuntu apt安裝mysql

關鍵字: centos 編譯安裝mysql5.7.18 rpm安裝5.7.18,ubuntu apt -get 安裝mysql 一. 編譯安裝前的準備 1.1 解除安裝原有的Mysql 在root使用者下操作 找出mysql的相關目錄

centos6.9編譯安裝mysql5.7.19

廢話不多說,先直接來完全操作命令 yum install cmake gcc gcc-c++ ncurses-devel wget wget http://downloads.sourceforge.net/project/boost/boost/1.59

ubuntu上編譯安裝mysql5.7.x【多次錯誤之後總結的方法】

1.進入mysql官網->Downloads->MySQL Community Edition->MySQL Community Server->Select Platform

CentOS6.7安裝mysql5.7.23(rpm方式)(遠端連線,注意關閉防火牆:chkconfig iptables off)

1、 查以前是否裝過Mysql(以前裝過,注意將之前的檔案刪除,見檔案最後列表)      rpm -qa|grep -i mysql 2、 發現有的話就都解除安裝     rpm -e --nodeps mysql-libs-5.1.73-5.el6_6.x86_64

CentOS 7.4下使用yum安裝MySQL5.7.20 最簡單的 (引用)

沒有 添加 下使用 href https user ogg where size 引用 https://blog.csdn.net/z13615480737/article/details/78906598 CentOS7默認數據庫是mariadb, 但是 好多用的都是my