# 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
###############################################
注意:對(duì)MysQL8.x,初始化MysQL數(shù)據(jù)時(shí)敌买,帶上? lower_case_table_names =1或者0 (1表示庫表大小寫不敏感柏靶,0表示敏感)值纱,意義重大
如果不加這個(gè)配置項(xiàng)初始化,默認(rèn)庫表大小寫不敏感偎箫。
因?yàn)橐坏┏跏蓟螅瑹o法通過后續(xù)修改配置文件更改大小寫敏感,否則會(huì)導(dǎo)致數(shù)據(jù)庫啟動(dòng)失敗囱皿,所以在初始化之前決定好是否要庫表區(qū)分大小寫!
# 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? ?用于解決一個(gè)什么問題呢忱嘹?
當(dāng)你經(jīng)常有大型sql 需要數(shù)據(jù)庫后臺(tái)執(zhí)行嘱腥,搞一個(gè)? sql掛載目錄,就不用docker cp? 大型sql 進(jìn)容器了
直接拷貝到宿主機(jī) /opt/sql 德谅, 就容器中 /opt/sql? 就可以執(zhí)行導(dǎo)入了爹橱!
# 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