部署环境说明:
docker-ce版本:
# docker version
Client:
Version: 17.03.1-ce
API version: 1.27
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:05:44 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.1-ce
API version: 1.27 (minimum version 1.12)
Go version: go1.7.5
Git commit: c6d412e
Built: Mon Mar 27 17:05:44 2017
OS/Arch: linux/amd64
Experimental: false
msyql版本:msyql5.7.19 (源码包部署)
物理主机centos7.2
内核:3.10.0-514.21.1.el7.x86_64
全程编译安装(mysql官网针对容器也有方案:https://hub.docker.com/r/mysql/mysql-server/,本人尝试在容器中使用源码编译)
1、源码安装cmake工具(推介使用最新稳定版):
wget https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.tar.gz(二进制的针对x86_64位架构的cpu)
wget https://cmake.org/files/v3.9/cmake-3.9.0.tar.gz(源码包)
#本人使用源码包安装cmake
yum -y install gcc gcc-c++ curl wget
tar xf cmake-3.9.0.tar.gz -C /usr/local/src/
cd /usr/local/src/
ln -sv cmake-3.9.0 cmake
cd cmake
./bootstrap
gmake
make install
# which cmake
/usr/local/bin/cmake
ok,cmake安装完毕
2、源码编译安装mysql5.7.19
yum -y install make gcc-c++ bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper net-tools
https://dev.mysql.com/downloads/file/?id=471658 #mysql-boost-5.7.19.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.19.tar.gz
https://dev.mysql.com/downloads/file/?id=471659 #mysql-5.7.19.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19.tar.gz
从mysql 5.7.5开始Boost库是必需的,需要下载:
tar xf mysql-boost-5.7.19.tar.gz
mv mysql-5.7.19 /usr/local/src/mysql-bootst-5.7.19 #解压后,这里需要改名,不然和mysql源码包就重名了
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
mkdir /data
chown -R mysql.root /data/
tar xf mysql-5.7.19.tar.gz -C /usr/local/src/
cd /usr/local/src/
ln -sv mysql-5.7.19 mysql
cd mysql
mkdir bld
cd bld/
#进行编译安装
#这些编译参数需要按照自己的需求环境做修改,这里只是一个测试样例的cmake参数:
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/ \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/mysql-bootst-5.7.19/boost \
-DSYSCONFDIR=/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1
make -j4 #这里的-j参数是用来指定你cpu核心数的,32核心你可以指定-j32,这样编译更快,充分使用cpu资源
make install
3、初始化、提供配置文件并启动mysql5.7.19:
#修改安装目录下文件的属主:
cd /usr/local/mysql/
chown -R mysql .
chgrp -R mysql .
# ll
total 36
drwxr-xr-x 2 mysql mysql 4096 Jul 28 04:27 bin
-rw-r--r-- 1 mysql mysql 17987 Jun 22 14:13 COPYING
drwxr-xr-x 2 mysql mysql 55 Jul 28 04:26 docs
drwxr-xr-x 3 mysql mysql 4096 Jul 28 04:26 include
drwxr-xr-x 4 mysql mysql 191 Jul 28 04:26 lib
drwxr-xr-x 4 mysql mysql 30 Jul 28 04:26 man
drwxr-xr-x 10 mysql mysql 289 Jul 28 04:27 mysql-test
-rw-r--r-- 1 mysql mysql 2478 Jun 22 14:13 README
drwxr-xr-x 28 mysql mysql 4096 Jul 28 04:27 share
drwxr-xr-x 2 mysql mysql 90 Jul 28 04:27 support-files
初始化数据库和用户:
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/
2017-07-28T04:38:25.380874Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2017-07-28T04:38:26.671583Z 0 [Warning] InnoDB: New log files created, LSN=45790
2017-07-28T04:38:26.900198Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2017-07-28T04:38:26.970212Z 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: 9900d70c-734e-11e7-9c5e-0242ac110003.
2017-07-28T04:38:26.975541Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2017-07-28T04:38:26.978879Z 1 [Note] A temporary password is generated for root@localhost: Ty(hjw?W6hcW
ok,数据库初始化完毕。
chown -R root .
# ll
total 36
drwxr-xr-x 2 root mysql 4096 Jul 28 04:27 bin
-rw-r--r-- 1 root mysql 17987 Jun 22 14:13 COPYING
drwxr-xr-x 2 root mysql 55 Jul 28 04:26 docs
drwxr-xr-x 3 root mysql 4096 Jul 28 04:26 include
drwxr-xr-x 4 root mysql 191 Jul 28 04:26 lib
drwxr-xr-x 4 root mysql 30 Jul 28 04:26 man
drwxr-xr-x 10 root mysql 289 Jul 28 04:27 mysql-test
-rw-r--r-- 1 root mysql 2478 Jun 22 14:13 README
drwxr-xr-x 28 root mysql 4096 Jul 28 04:27 share
drwxr-xr-x 2 root mysql 90 Jul 28 04:27 support-files
chown -R mysql.root /data/
# ll -d /data/
drwxr-xr-x 5 mysql root 147 Jul 28 04:38 /data/
# ll /data/
total 110628
-rw-r----- 1 mysql root 56 Jul 28 04:38 auto.cnf
-rw-r----- 1 mysql root 420 Jul 28 04:38 ib_buffer_pool
-rw-r----- 1 mysql root 12582912 Jul 28 04:38 ibdata1
-rw-r----- 1 mysql root 50331648 Jul 28 04:38 ib_logfile0
-rw-r----- 1 mysql root 50331648 Jul 28 04:38 ib_logfile1
drwxr-x--- 2 mysql root 4096 Jul 28 04:38 mysql
drwxr-x--- 2 mysql root 8192 Jul 28 04:38 performance_schema
drwxr-x--- 2 mysql root 8192 Jul 28 04:38 sys
提供配置文件:
(这里只是提供一个测试的配置文件,具体的可以查看官网的配置手册)
# cat /etc/my.cnf
[mysqld]
datadir=/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
skip-grant-tables
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
# cat /etc/my.cnf.d/client.cnf
#
# These two groups are read by the client library
# Use it for options that affect all clients, but not the server
#
[client]
socket = /tmp/mysql.sock
# This group is not read by mysql client library,
# If you use the same .cnf file for MySQL and MariaDB,
# use it for MariaDB-only client options
[client-mariadb]
启动mysql服务:
bin/mysqld_safe --user=mysql &
查看监听端口:
# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 80 :::3306 :::*users:(("mysqld",pid=10552,fd=31))
以下为可选操作:
给mysql服务一个启动脚本:
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
该脚本在容器中不适用,需要自己手动修改
4、连接mysql服务进行测试
[root@mysql ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.19 Source distribution
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
MySQL [ocean]> select version();
+-----------+
| version() |
+-----------+
| 5.7.19 |
+-----------+
1 row in set (0.00 sec)
创建库、表都是没有问题的,到此,源码安装完毕。
说明:
连接数据库测试的时候,一开始遇到了密码过期的问题,处理也很简单,启动的时候跳过用户密码授权表,修改密码:
在[mysqld]下添加:
skip-grant-tables
然后重启mysql守护进程后修改密码:
update mysql.user set authentication_string=password('新密码') where user='root';
然后去掉skip-grant-tables配置重启mysql守护进程即可。