【MySQL】关于容器化MySQL8.x数据后台导入问题

# 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

你可能感兴趣的:(【MySQL】关于容器化MySQL8.x数据后台导入问题)