最近需要将三台腾讯云服务器的应用全部迁移到一个Docker CentOS7.x的镜像中。其他应用迁移都比较顺利,唯安装MySQL遇到了一些问题。因为在容器中使用systemctl/service命令会出现下图的错误:
虽然找到一些解决方案,但是需要在宿主机上操作,于是找了容器平台运营方,很遗憾他们回答:“无法解决”。这就无法使用我一贯安装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-devel3. 安装MySQL#
3.1. 解压#
tar -zxvf mysql-boost-5.7.34.tar.gz
cd mysql-5.7.34/3.2. 创建编译目录#
mkdir configure
cd configure3.3. 生成编译环境#
cmake .. -DWITH_BOOST=../boost/boost_1_59_0/ -DWITH_EMBEDDED_SERVER=OFF3.4. 安装编译#
make && make install3.5. 创建mysql用户组和用户#
groupadd mysql
useradd -g mysql mysql3.6. 设置权限#
MySQL通过3.4. 安装编译步骤完成后所在的目录为 /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql3.7. 创建my.cnf#
vim /etc/my.cnfmy.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.sock3.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:以上是我在掘金写的文章,所以图片带水印。