# MySQL8 单点教程

# 你将获取

  • docker快速安装mysql8
  • 生产环境安装使用mysql8

# docker快速体验

以下快速体验只为开发过程临时使用,数据未做安全配置

docker run \
	-p 3306:3306 \
	-v /opt/acp-mysql8/data:/var/lib/mysql \
  	-v /opt/acp-mysql8/my.cnf:/etc/mysql/conf.d/my.cnf \
	-e MYSQL_ROOT_PASSWORD=Admin123! \
	--name acp-mysql8 \
	-d registry.cn-shenzhen.aliyuncs.com/alinesno-base/mysql:8.0.18

以上配置,数据库的数据映射到本地/opt/acp-mysql8目录下,查看运行状态

docker ps | grep mysql

安装完成访问账号密码为:

账号: root
密码: Admin123!

# 安装

安装过程使用 root 操作

上传软件至 Linux 服务器/home/alinesno/soft/目录

此处用户可以使用 xftp 或者 xshell 等工具,书要简言

scp -r mysql-server-mysql-5.7.24.tar.gz root@192.168.1.110:/opt/
scp -r boost_1_59_0.tar.gz root@192.168.1.110:/opt/

安装依赖软件

sudo yum install -y cmake , make , gcc , gcc-c++ , bison , ncurses , ncurses-devel

解压包

cd /opt/
tar -zxvf boost_1_59_0.tar.gz -C /usr/local/
tar -zxvf mysql-server-mysql-5.7.24.tar.gz
cd mysql-server-mysql-5.7.24

初始化用户,添加 mysql 用户组和 mysql 用户

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

编译源码,其中参数说明

cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DSYSCONFDIR=/etc \
-DEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DEXTRA_CHARSETS=all
  • DCMAKE_INSTALL_PREFIX:安装路径
  • DMYSQL_DATADIR:数据存放目录
  • DWITH_BOOST:boost 源码路径
  • DSYSCONFDIR:my.cnf 配置文件目录
  • DEFAULT_CHARSET:数据库默认字符编码
  • DDEFAULT_COLLATION:默认排序规则
  • DENABLED_LOCAL_INFILE:允许从本文件导入数据
  • DEXTRA_CHARSETS:安装所有字符集

编译安装

-j 参数表示根据 CPU 核数指定编译时的线程数,可以加快编译速度

make -j `grep processor /proc/cpuinfo | wc -l`
make install

# 配置数据库

初始化数据库

注意:如果使用–initialize 参数初始化系统数据库之后,会在~/.mysql_secret 文件中生成 root 用户的一个临时密码,同时也在初始化日志中打印出来了,如下图:

cd /usr/local/mysql
chown -R mysql:mysql .
./bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
./bin/mysql_ssl_rsa_setup
chown -R root .
chown -R mysql data

查看初始密码:

cat ~/.mysql_secret

复制配置文件

cp support-files/my-default.cnf /etc/my.cnf

参数优化,编辑文件/etc/my.conf

vim /etc/my.conf

调整内容如下

[client]
port=3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

skip-external-locking
skip-name-resolve

user=mysql
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
tmpdir=/usr/local/mysql/temp

# server_id = .....
socket=/usr/local/mysql/mysql.sock
log-error=/usr/local/mysql/logs/mysql_error.log
pid-file=/usr/local/mysql/mysql.pid
open_files_limit=10240
back_log=600
max_connections=500
max_connect_errors=6000
wait_timeout=605800
#open_tables=600
#table_cache = 650
#opened_tables = 630

max_allowed_packet=32M
sort_buffer_size=4M
join_buffer_size=4M
thread_cache_size=300
query_cache_type=1
query_cache_size=256M
query_cache_limit=2M
query_cache_min_res_unit=16k

tmp_table_size=256M
max_heap_table_size=256M

key_buffer_size=256M
read_buffer_size=1M
read_rnd_buffer_size=16M
bulk_insert_buffer_size=64M

lower_case_table_names=1
default-storage-engine=INNODB

innodb_buffer_pool_size=2G
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_flush_method=O_DIRECT
#####################
thread_concurrency=32
long_query_time=2
slow-query-log=on
slow-query-log-file=/usr/local/mysql/logs/mysql-slow.log

[mysqldump]
quick
max_allowed_packet=32M

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

配置启动服务

cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld

启动数据库

# 启动mysql服务
service mysqld start
# 停止mysql服务
service mysqld stop
# 重新启动mysql服务
service mysqld restart
# 开机启动
service mysqld enable

设置数据库密码,及远程登陆

/usr/local/mysql/bin/mysql -e "grant all privileges on *.* to root@'127.0.0.1' identified by "1234qwer" with grant option;"
/usr/local/mysql/bin/mysql -e "grant all privileges on *.* to root@'localhost' identified by "1234qwer" with grant option;"
# 开启远程登录(将host设为%即可),生产当中极不建议这么做
/usr/local/mysql/bin/mysql -e "grant all privileges on *.* to root@'%' identified by "1234qwer" with grant option;"

配置环境变量,编辑/etc/profile:

vim /etc/profile

添加以下内容

# mysql env
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile

# Ansible 构建

  • 脚本编写

# 镜像

  • 构建镜像
  • 使用

# 参考资料