拉取 msyql 鏡像
docker pull mysql:8.0.18
創(chuàng)建 mysql 8 守護(hù)式容器
docker run -di --name=mysql8 -p 3306:3306 -v /usr/local/tmp:/etc/mysql/tmp --privileged=true -e MYSQL_ROOT_PASSWORD=xxx mysql:8.0.18
進(jìn)入容器
docker exec -it mysql8[容器id] /bin/bash
進(jìn)入數(shù)據(jù)庫修改遠(yuǎn)程訪問
- mysql -uroot -pxxx
- use mysql;
-
select host,user from user; 讓root能遠(yuǎn)程連接,host修改為"%",如果是的就不用修改了
image.png - 修改host為%的方法 update user set host='%' where user='root';
- 刷新權(quán)限 FLUSH PRIVILEGES;
- navicate for mysql 遠(yuǎn)程連接
- use mysql;
- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
或者
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'; - FLUSH PRIVILEGES;
- 此時(shí)使用 navicat for mysql 遠(yuǎn)程連接,提示認(rèn)證問題,因?yàn)?mysql8 及之后的加密規(guī)則與之前版本的不同
- 修改密碼為用不過期
- ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
- 修改密碼并指定加密規(guī)則為 mysql_native_password
- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 刷新權(quán)限
- FLUSH PRIVILEGES;
- 這樣navicat for mysql就可以遠(yuǎn)程連接數(shù)據(jù)庫了;
- docker commit 容器id 指定要?jiǎng)?chuàng)建的鏡像名:版本號(hào)
- mysql8 創(chuàng)建用戶
- 創(chuàng)建用戶的操作已經(jīng)不支持grant的同時(shí)創(chuàng)建用戶的方式,需先創(chuàng)建用戶再進(jìn)行授權(quán)
mysql> grant all on *.* to 'admin'@'%' identified by 'admin123';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'admin123'' at line 1
mysql> create user 'admin'@'%' identified by 'admin123';
Query OK, 0 rows affected (0.06 sec)
mysql> grant all on *.* to 'admin'@'%' ;
Query OK, 0 rows affected (0.04 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
- 修改密碼,注意 'admin'@'%' 這是是 % 還是 localhost 根據(jù)用戶表 host 決定
alter user 'admin'@'%' IDENTIFIED WITH mysql_native_password by 'admin123456'
MySQL 解決source 命令導(dǎo)入數(shù)據(jù)庫 亂碼
- mysql -u root -pxxx --default-character-set=utf8
- use dbname
- source /etc/my.sql
配置文件解決 myql 導(dǎo)入中文亂碼
- 進(jìn)入容器
docker exec -it mysql8 /bin/bash - 修改字MySQL字符集
如果沒有 vim 命令,執(zhí)行以下操作- 執(zhí)行命令,作用是激活和更新源
apt-get update
這個(gè)過程可能比較漫長,不過沒關(guān)系有解決辦法,先不要執(zhí)行以上命令,如果執(zhí)行了 ctrl+C 結(jié)束執(zhí)行,修改
/etc/apt/sources.list 文件
image.png
在宿主機(jī)任意目錄下創(chuàng)建 sources.list 文件,我這里是在 root/callcenter/files 目錄下,直接使用 vi sources.list 命令沒有會(huì)自動(dòng)創(chuàng)建文件,貼入以下代碼,換成國內(nèi)源地址,保存退出
- 執(zhí)行命令,作用是激活和更新源
deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
- 執(zhí)行命覆蓋新容器中的 sources.list 文件
docker cp /root/callcenter/files/sources.list mysql:8/etc/apt/sources.list - 重啟容器 docker restart mysql8
做完以上操作無誤,這個(gè)時(shí)候執(zhí)行 apt-get update 命令,更新速度杠杠的
- apt-update 激活后,執(zhí)行安裝 vim 命令
- apt-get install vim
等待安裝完成后,就可以使用 vim 命令了
vim /etc/mysql/my.cnf

image.png
- 沒有修改之前
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
- 在 [mysqld] 上面添加
[client]
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
保存退出
- 修改完之后是這樣
[client]
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
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Custom config should go here
!includedir /etc/mysql/conf.d/
- 重啟容器,就不亂碼了
docker restart mysql8 - 如果手一抖配置文件里寫做了,到值無法啟動(dòng),沒關(guān)系,將 mysql8 容器中的配置文件考出來在覆蓋回去即可,具體操作,以我這里為例
- 拷貝容器里的文件
docker cp mysql8:/etc/mysql/my.cnf /usr/local
這里的意思是將 mysql8 容器中的 my.cnf 文件拷貝到宿主機(jī) /usr/local 目錄下 - 還原文件,修改正確后在覆蓋回去
docker cp /usr/local/my.cnf mysql8:/etc/mysql/my.cnf 將文件在覆蓋回去
- 拷貝容器里的文件

