跳过正文
  1. 文章/

在Docker CentOS7.x镜像中通过源码方式安装MySQL

·1171 字·3 分钟
目录

最近需要将三台腾讯云服务器的应用全部迁移到一个Docker CentOS7.x的镜像中。其他应用迁移都比较顺利,唯安装MySQL遇到了一些问题。因为在容器中使用systemctl/service命令会出现下图的错误:

image.png

虽然找到一些解决方案,但是需要在宿主机上操作,于是找了容器平台运营方,很遗憾他们回答:“无法解决”。这就无法使用我一贯安装MySQL的yum源方式,改成使用源码安装MySQL。以下记录我通过源码方式安装MySQL的过程。

目录

<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content" role="button"><label for="item-6896f659e9d08" ><span class=""><span style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></label><input aria-label="Toggle" aria-label="item-6896f659e9d08"  type="checkbox" id="item-6896f659e9d08" /></a></span>

1. 下载MySQL
#

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

版本说明(通过以上链接下载的MySQL的版本说明):

  • 版本 MySQL Community Server 5.7.34
  • Source Code
  • Generic Linux (Architecture Independent)
  • 带boost版本

2. 环境依赖
#

源码方式安装MySQL所需的环境依赖:

  • cmake
  • make
  • gcc
  • gcc-c++
  • bison
  • ncurses
  • ncurses-devel(devel是开发版本)
yum -y install cmake make gcc gcc-c++ bison ncurses ncurses-devel

3. 安装MySQL
#

3.1. 解压
#

tar -zxvf mysql-boost-5.7.34.tar.gz
cd mysql-5.7.34/

3.2. 创建编译目录
#

mkdir configure
cd configure

3.3. 生成编译环境
#

cmake .. -DWITH_BOOST=../boost/boost_1_59_0/ -DWITH_EMBEDDED_SERVER=OFF

3.4. 安装编译
#

make && make install

3.5. 创建mysql用户组和用户
#

groupadd mysql
useradd -g mysql mysql

3.6. 设置权限
#

MySQL通过3.4. 安装编译步骤完成后所在的目录为 /usr/local/mysql

chown -R mysql:mysql /usr/local/mysql

3.7. 创建my.cnf
#

vim /etc/my.cnf

my.cnf里面的内容为如下:

For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/mysql.sock

character-set-client-handshake=FALSE
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

explicit_defaults_for_timestamp=true

以上内容也可自行调整

3.8. 初始化数据库
#

cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql

我这边没有显示初始化密码,需要成功启动数据库跳过密码进入MySQL再修改密码。

3.9. 启动数据库
#

cd /usr/local/mysql/support-files
./mysql.server start

由于文章开始说过我这边的容器中无法使用systemctl/service命令,所以我没有把MySQL加入系统服务,有需要的读者可自行加入。

3.10. 设置登录MySQL
#

通过一下命令创建软连接,可直接在命令行使用mysql命令。

ln -s /usr/local/mysql/bin/mysql /usr/local/bin

创建软链接到/tmp/mysql.sock

ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock

3.11. 免密登录
#

修改/etc/my.cnf,添加skip-grant-tables

重启MySQL

cd /usr/local/mysql/support-files
./mysql.server restart

免密进入MySQL命令行

mysql

修改登录密码

use mysql;
update user set authentication_string=password('PASSWORD') where user='root';
flush privileges;

最后,退出MySQL命令行,将/etc/my.cnf中的skip-grant-tables删除或注释掉,再次重启MySQL就可以使用新修改的密码登录。

PS:以上是我在掘金写的文章,所以图片带水印。