目錄
- 1、拉取mysql
- 2、啟動容器鏡像
- 3、登錄容器
- 4、登錄mysql
在 【Docker】 下部署,使用命令行進行拉取。
1、拉取mysql
最新版本mysql:
docker pull mysql:latest
拉取5.7版本mysql:
docker pull mysql:5.7
2、啟動容器鏡像
docker run -p 13306:3306 --name my-mysql -v $PWD/conf:/etc/mysql -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Dl123456 -d mysql:5.7
【說明】
- -p 13306:3306 將容器的 3306 端口映射到主機的 3306 端口
- –name my-mysql 啟動后容器名為 my-mysql
- -v $PWD/conf:/etc/mysql 將主機當前目錄下的 conf/ 掛載到容器的 /etc/mysql (conf目錄為mysql的配置文件,不掛載也沒問題)
- -v $PWD/logs:/logs 將主機當前目錄下的 logs 目錄掛載到容器的 /logs (logs目錄為mysql的日志目錄,不掛載也沒影響)
- -v $PWD/data:/var/lib/mysql 將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql (data目錄為mysql配置的數據文件存放路徑,這個還是建議掛載,是存儲數據的,容器down掉,還能再次掛載數據。)
- -e MYSQL_ROOT_PASSWORD=Dl123456 初始化 root 用戶的密碼
3、登錄容器
docker exec -it my-mysql bash ls
進入MySQl容器
使用的 docker exec 命令,-it是參數,bash表示創建一個交互界面
退出容器
方法一:如果要正常退出不關閉容器,請按Ctrl+P+Q進行退出容器
方法二:如果使用exit退出,那么在退出之后會關閉容器
4、登錄mysql
mysql -uroot -p --default-character-set=utf8
輸入密碼登陸即可
查看數據庫
mysql> show databases;
設置能遠程登錄mysql
mysql> use mysql
輸出
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
查看用戶
mysql> select host,user from user;
設置root用戶在任何地方進行遠程登錄,并具有所有庫任何操作權限。
(暴露的攻擊面太大)。
給用于授予權限 grant all privileges on *.* to 'root'@'%' ;
修改用戶的密碼和加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
刷新
FLUSH PRIVILEGES;
下面是網上查到最多授權的寫法,可能會報錯或者無法連接
允許root用戶在任何地方進行遠程登錄
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Dl123456';
允許root用戶在任何地方進行遠程登錄,并具有所有庫任何操作權限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Dl123456' WITH GRANT OPTION;
刷新
FLUSH PRIVILEGES; flush privileges;
如果現在還沒有連接成功建議重啟下Docker容器:
docker restart [CONTAINER ID]
退出mysql數據庫:
exit
【說明】
mysql 8.0版本以后 默認使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password。
從 5.7 升級 8.0 版本的不會改變現有用戶的身份驗證方法,但新用戶會默認使用新的 caching_sha2_password 。
客戶端不支持新的加密方式。
更改加密方式
update user set password_expired = "Y"where user="root"; ALTER USER'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Dl123456';
遠程連接
允許root用戶在一個特定的IP進行遠程登錄,并具有所有庫任何操作權限
在本機先使用root用戶登錄mysql進行授權操作:
mysql -u root -p"youpassword"
GRANT ALL PRIVILEGES ON *.* TO root@"172.16.16.152" IDENTIFIED BY "youpassword" WITH GRANT OPTION;
重載授權表: FLUSH PRIVILEGES;
退出mysql數據庫: exit
允許root用戶在一個特定的IP進行遠程登錄,并具有所有庫特定操作權限,
在本機先使用root用戶登錄mysql 進行授權操作:
mysql -u root -p"youpassword"
GRANT select,insert,update,delete ON *.* TO root@"172.16.16.152" IDENTIFIED BY "youpassword";
重載授權表: FLUSH PRIVILEGES;
退出mysql數據庫: exit
刪除用戶授權,需要使用REVOKE命令,
先在本機登錄mysql進行授權操作:
mysql -u root -p"youpassword"
GRANT select,insert,update,delete ON TEST-DB TO test-user@"172.16.16.152" IDENTIFIED BY "youpassword";
REVOKE privileges ON 數據庫[.表名] FROM user-name; REVOKE all on TEST-DB from test-user;
【注】該操作只是清除了用戶對于TEST-DB的相關授權權限,但是這個“test-user”這個用戶還是存在。
最后從用戶表內清除用戶:
DELETE FROM user WHERE user="test-user";
重載授權表: FLUSH PRIVILEGES;
退出mysql數據庫: exit
MYSQL權限詳細分類:
全局管理權限
- FILE: 在MySQL服務器上讀寫文件。
- PROCESS: 顯示或殺死屬于其它用戶的服務線程。
- RELOAD: 重載訪問控制表,刷新日志等。
- SHUTDOWN: 關閉MySQL服務。
數據庫/數據表/數據列權限
- ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。
- CREATE: 建立新的數據庫或數據表。
- DELETE: 刪除表的記錄。
- DROP: 刪除數據表或數據庫。
- INDEX: 建立或刪除索引。
- INSERT: 增加表的記錄。
- SELECT: 顯示/搜索表的記錄。
- UPDATE: 修改表中已存在的記錄。
特別的權限
- ALL: 允許做任何事(和root一樣)。
- USAGE: 只允許登錄–其它什么也不允許做。
到此這篇關于使用Docker部署MySQL的實現步驟的文章就介紹到這了,更多相關Docker部署MySQL內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!