docker 安裝 mysql 8

拉取 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í)行以下操作
    1. 執(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)源地址,保存退出
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 命令,更新速度杠杠的
  1. 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 容器中的配置文件考出來在覆蓋回去即可,具體操作,以我這里為例
    1. 拷貝容器里的文件
      docker cp mysql8:/etc/mysql/my.cnf /usr/local
      這里的意思是將 mysql8 容器中的 my.cnf 文件拷貝到宿主機(jī) /usr/local 目錄下
    2. 還原文件,修改正確后在覆蓋回去
      docker cp /usr/local/my.cnf mysql8:/etc/mysql/my.cnf 將文件在覆蓋回去
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容