1、拉取MySQL
docker pull mysql:8.0 (如果不加版本號那麼拉取的就是latest最新的)
查看拉取是否成功:docker images
2、創建data、log、config用來掛載外部文件
mkdir -p /home/mysql/{conf,logs,data/mysql}
或者
mkdir -p /apps/mysql/etc \
mkdir -p /apps/mysql/log \
mkdir -p /apps/mysql/config \
mkdir -p /apps/mysql/data \;
3、運行MySQL
如果下面mysql中帶有版本號,那麼啓動的就是指定的版本號mysql,如果沒有帶,那麼啓動的就是最新的版本號
# 運行方法一:
docker run -e MYSQL_ROOT_PASSWORD=123456 -d -p 3306:3306 mysql(mysql:8.0)
# (https://itbilu.com/linux/docker/EyP7QP86M.html)
#運行方法二(採用外部文件配置運行):
docker run \
-d -p 3306:3306 \
--name mysql8 \
--privileged=true \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /apps/mysql/data:/var/lib/mysql:rw \
-v /apps/mysql/log:/var/log/mysql:rw \
-v /apps/mysql/config/my.cnf:/etc/mysql/my.cnf:rw \
-v /etc/localtime:/etc/localtime:ro \
--restart=always \
mysql:8.0
注意:當我們使用上面方法二命令啓動的時候,我們需要在config文件夾下面創建一個我們自己的配置文件“my.cnf”否者要報錯,而且一定要加:“--restart=always \”否者可能出現啓動不報錯,但是使用“docker ps”無法查看到mysql啓動鏡像,使用“docker ps -a”可以查看到mysql容器已經啓動.-------此時問題還是沒有解決,因爲此時如果我們讓它重啓的話,我們通過"docker ps"可以看到如下問題:
my.conf文件夾內容可以爲(也可以爲空):
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
查詢是否運行成功:docker ps
4、進入MySQL
docker exec -it 容器ID /bin/sh ---->exec進入Docker終端(CTRL+D退出)
輸入MySQL命令:mysql -uroot -p
輸入MySQL密碼:123456
然後使用navicat連接時報:1251-Client does not support authentication protocol requested by server;consider upgrading MySQL client;
此時是由於安裝MySQL時的默認加密問題...
操作如下:進入到mysql控制檯(分開執行)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的數據庫密碼';
FLUSH PRIVILEGES;
5、備份數據庫
Docker的MySQL備份:
表備份:docker exec -it CONTAINERID mysqldump -uroot -p db1 table1 table2 > /test_db.sql
單庫:docker exec -it CONTAINERID mysqldump -uroot -p test_db > /test_db.sql
多庫:docker exec -it CONTAINERID mysqldump -uroot -p --databases db1 db2 > /test_db.sql
全部:docker exec -it CONTAINERID mysqldump -uroot -p --all-databases > /test_db.sql
MySQL備份:
表備份:mysqldump -uroot -p db1 table1 table2 > /test_db.sql
單庫:mysqldump -uroot -p test_db > /test_db.sql
多庫:mysqldump -uroot -p --databases dbname1 dbname2 > /test_db.sql
全部:mysqldump -uroot -p --all-databases > /test_db.sql
6、忘記密碼
# 進入容器:docker exec -it mysql /bin/bash
cd /etc/mysql
vi my.cnf
# 在最後添加:
skip-grant-tables #在啓mysql時不啓動grant-tables
# 重啓容器
docker restart mysql