一、安裝部署docker、docker-compose
可以參考之前的兩篇博客
二、編寫docker-compose文件(這裏提供二種方式)
第一種、不掛載本地文件,文件都由docker附加捲直接生成,而後修改其中的文件即可
1、配置docker-compose.yml文件
version: '2'
services:
mysql1:
environment:
MYSQL_ROOT_PASSWORD: "yourpassword"
MYSQL_USER: 'test'
MYSQL_PASS: 'yourpassword'
image: "docker.io/mysql:latest"
container_name: mysql1
ports:
- "3339:3306"
mysql2:
environment:
MYSQL_ROOT_PASSWORD: "yourpassword"
MYSQL_USER: 'test'
MYSQL_PASS: 'yourpassword'
image: "docker.io/mysql:latest"
container_name: mysql2
ports:
- "3340:3306"
- MYSQL_ROOT_PASSWORD爲數據庫的密碼,也就是root用戶的密碼。
- MYSQL_USER和MYSQL_PASS另外一個用戶名和密碼。
- image爲你拉取鏡像的地址和版本,當然也可以換成自己的鏡像倉庫,這裏使用官方的。
- volumes裏面的參數爲映射本地和docker容器裏面的文件夾和目錄。.
- ports 爲映射主機和容器的端口,前面的端口是你要暴露給外部的端口,後面的端口是docker自己的端口。
2、啓動鏡像
docker-compose up -d
3、進入容器內部,連接上mysql數據庫
進入容器:docker exec -it mysql1(容器ID或者name) /bin/bash
連接mysql:mysql -u root -p
接着就輸入剛剛docker-compose.yml裏配置的密碼
正常情況下是能夠正常連接的。不過也會出現下面的問題
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)
解決辦法:
(1)、跳過MySQL的密碼認證過程。修改/etc/my.cnf文件,加入"skip-grant-tables"用來跳過密碼驗證的過程
(2)、重啓MySQL
/etc/init.d/mysql restart(有些用戶可能需要使用/etc/init.d/mysqld restart),
service mysqld resatrt
systemctl restart docker(三選一)
(3)、重啓之後輸入mysql即可進入mysql
(4)、接下來就是用sql來修改root的密碼(這步修改的方式有好多種,不一樣的版本有不同的方式,每個試下成功了即可)
1.update user set password=password("你的新密碼") where user="root";
2.update user set authentication_string=password("你的新密碼") where user="root";
3.ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密碼'
(5)、編輯/etc/my.cnf,去掉剛纔添加的內容,然後重啓MySQL。大功告成!
4、查看容器狀態,docker container ps
5、使用navicat測試遠程連接,ip添docker-compose.yml暴露的端口而不是3306
第二種、掛載本地文件,文件本地生成好
1、配置docker-compose.yml文件
version: '2'
services:
mysql1:
environment:
MYSQL_ROOT_PASSWORD: "yourpassword"
MYSQL_USER: 'test'
MYSQL_PASS: 'yourpassword'
image: "docker.io/mysql:latest"
container_name: mysql1
volumes:
- "./db:/var/lib/mysql"
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
ports:
- "3305:3306"
當前文件夾的tree結構
root@localhost mysql # tree
.
├── conf
│ └── my.cnf
├── db
├── docker-compose.yml
└── init
└── init.sql
2、配置文件和初始化文件
root@localhost conf # cat my.cnf
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
root@localhost init # cat init.sql
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
3.其它步驟同上