拉取鏡像
docker pull mysql:8.0.23
創建掛載文件
mkdir -p /home/docker/mysql/conf
mkdir -p /home/docker/mysql/data
mkdir -p /home/docker/mysql/logcd /home/docker/mysql/conf
touch my.cnf#授權
chmod 777 -R /home/docker/mysql/conf
chmod 777 -R /home/docker/mysql/data
chmod 777 -R /home/docker/mysql/log
編輯my.cnf
vi my.cnf
內容如下:
default-character-set=utf8[mysql]
default-character-set=utf8[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve[mysqld]# 不區分大小寫
lower_case_table_names = 1#開啟慢查詢
slow_query_log = ON
#修改慢sql的閾值,sql執行超過閾值的時候就會記錄到慢日志的log文件中
long_query_time = 1#由于在MySQL5.7版本以上,默認設置SQL_Mode模式,在模式里有NO_ZERO_DATE,NO_ZERO_IN_DATE,存在表示系統里DATE類型字段不能有0值
sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'#Mysql報錯Packet for query is too large問題解決
max_allowed_packet=4M
啟動容器
docker run -d \
--name mysql \
-p 3306:3306 \
--privileged=true \
--restart=always \
-v /home/docker/mysql/log:/var/log/mysql \
-v /home/docker/mysql/data:/var/lib/mysql \
-v /home/docker/mysql/conf/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=密碼 \
mysql:8.0.23
創建用戶和授權
#進入容器內部
docker exec -it 容器id /bin/bashmysql -u root -p
密碼#創建用戶和密碼,以及授權
create user 'gxj'@'localhost' identified by '密碼';
grant all on *.* to 'gxj'@'localhost';
flush privileges;#找到mysql數據庫
use mysql;
#查看結果是不是root用戶僅允許本地 localhost 登錄,是的話,就要修改它的host為%,表示任意IP地址都可以登錄
select host ,user from user;#手動修改,把root 的locahost改為%(原作者那是單引號,應該用雙引號)
update user set host ="%" where user="gxj";
flush privileges;