# cat /opt/mysqlconfig/mysqld.cnf
#####################################################
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
symbolic-links = 0
max_connections = 2000
user = mysql
skip_name_resolve
skip-host-cache
skip-log-bin
character-set-client-handshake = FALSE
lower_case_table_names = 1
character-set-server = utf8
collation-server = utf8_general_ci
init_connect = "SET NAMES 'utf8'"
default_authentication_plugin = mysql_native_password
#general_log = on
#general_log_file = /var/lib/mysql/general.log
#log_timestamps = SYSTEM
require_secure_transport = ON
ssl-ca = /var/lib/mysql/ca.pem
ssl-cert = /var/lib/mysql/server-cert.pem
ssl-key = /var/lib/mysql/server-key.pem
[mysql]
default-character-set = utf8
[client]
default-character-set = utf8
######################################################
# cat mysql8.x_init.sh
#########################################
#!/bin/bash
mysql_ver="8.0"
mysql_datadir="/opt/mysqldata"
mysql_root_pwd="MySQL@123"
registry_addr=""
docker run -itd \
--name mysql \
-p 3306:3306 \
-e UMASK=0600 \
-e UMASK_DIR=0700 \
-e MYSQL_HISTFILE=/dev/null \
-v ${mysql_datadir}:/var/lib/mysql \
-v /opt/mysqlconfig/mysqld.cnf:/etc/mysql/conf.d//mysqld.cnf \
-e MYSQL_ROOT_PASSWORD="${mysql_root_pwd}" \
mysql:${mysql_ver}
sleep 30
if ss -tan | grep -w "3306" > /dev/null 2>&1; then
docker stop mysql
docker rm mysql
echo "Mysql init successfuly!"
else
echo "Mysql init failed!"
fi
###############################################
注意:对MysQL8.x,初始化MysQL数据时,带上 lower_case_table_names =1或者0 (1表示库表大小写不敏感,0表示敏感),意义重大
如果不加这个配置项初始化,默认库表大小写不敏感。
因为一旦初始化后,无法通过后续修改配置文件更改大小写敏感,否则会导致数据库启动失败,所以在初始化之前决定好是否要库表区分大小写!
# cat /etc/systemd/system/mysqld.service
###############################################
[Unit]
Description=MySQL Server
After=network-online.target docker.service
Requires=docker.service
[Service]
Type=simple
ExecStartPre=-/usr/bin/docker rm -f mysql
ExecStart=/usr/bin/docker run \
--name mysql \
-p 33306:33306 \
-e UMASK=0600 \
-e UMASK_DIR=0700 \
-e MYSQL_HISTFILE=/dev/null \
-v /opt/mysqldata:/var/lib/mysql \
-v /opt/mysqlconfig/mysqld.cnf:/etc/mysql/conf.d//mysqld.cnf \
-v /opt/sql:/opt/sql \
-v /etc/localtime:/etc/localtime \
--security-opt seccomp=unconfined \
mysql:8.0sec
ExecStop=/usr/bin/docker stop mysql
LimitNOFILE=65535
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
############################################################
# systemctl daemon-reload
# systemctl start mysqld
# systemctl enable mysqld
# systemctl status mysqld
目录挂载 -v /opt/sql:/opt/sql 用于解决一个什么问题呢?
当你经常有大型sql 需要数据库后台执行,搞一个 sql挂载目录,就不用docker cp 大型sql 进容器了
直接拷贝到宿主机 /opt/sql , 就容器中 /opt/sql 就可以执行导入了!
# cp X.sql /opt/sql
# docker exec -it mysql bash
# mysql -u user -p"password" -D database < /opt/sql/X.sql
或者
# docker exec -it mysql mysql -u user -p"password" -D database < /opt/sql/X.sql
或者
# docker exec -it mysql bash
# cd /opt/sql
# mysql -u user -p"password"
> use database;
> source X.sql