特别说明,阿里云上使用docker装的时候,需要注意
* 阿里云后台开通端口。
* 阿里云服务器里面的防火墙。
依据自己的需求去docker里面search images 。
这里说明一下mysql 8.0 以后的版本在授权远程链接的时候,与之前的版本是有区别的。后面会详细说到。
1.从docker 上面搜索mysql
docker search mysql
2.依据docker search 出来的结果pull 对应的镜像,或者直接pull 自己需要的版本。我这里是直接pull 指定的版本
docker pull mysql:5.7.28
3.下载完毕以后,将mysql 的data,conf 目录都挂载至机器某个文件夹下,我这里挂载的是/data/tadopDataProject/mysql/13306
docker run --name mysql_13306 -d -e MYSQL_ROOT_PASSWORD=123456 -v /data/tadopDataProject/mysql/13306/data:/var/lib/mysql -v /data/tadopDataProject/mysql/13306/conf:/etc/mysql/ -p 13306:3306 mysql:5.7.28
run:启动容器的命令
--name:并容器的命名
-d:让容器后台运行(其他对应参数:-i交互式操作,-t开启一个伪终端)
-e MYSQL_ROOT_PASSWORD:初始化root用户的密码为123456
-p:将容器的3306端口映射到主机的3307端口
-v: 挂载目录, (宿主目录:容器目录)
mysql:5.7.28:mysql镜像的仓库名与标签,也可直接通过镜像id启动
4.启动完成以后,查看镜像是否启动成功,如果成功,则准备授权。
docker ps 查看是否启动成功
[root@aliyun-ap2 data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
11e3679fc52c mysql:5.7.28 "docker-entrypoint.s…" 33 minutes ago Up 33 minutes 33060/tcp, 0.0.0.0:13306->3306/tcp mysql_13306
5.查看端口是否正常
netstat -anp |grep 13306
[root@aliyun-ap2 data]# netstat -anp |grep 13306
tcp6 0 0 :::13306 :::* LISTEN 9696/docker-proxy
6.进入容器内并登陆
如果成功则执行:
docker exec -it mysql_13306 bash
mysql -u root -p
输入启动时设置的密码,我这里是123456
7.查看授权状态,有的数据库版本是已经对root 账户对外授权过了,就不需要处理,但有的需要。
登陆以后,查看数据库版本是
[root@aliyun-ap2 3305]# docker exec -it mysql_13306 bash
root@4b30712295de:/#
root@4b30712295de:/# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.28 |
+-----------+
1 row in set (0.00 sec)
查看mysql的端口
show global variables like 'port';
查看授权状态
select host,user,plugin,authentication_string from mysql.user;
mysql> select host,user,plugin,authentication_string from mysql.user;
+-----------+---------------+-----------------------+-------------------------------------------+
| host | user | plugin | authentication_string |
+-----------+---------------+-----------------------+-------------------------------------------+
| localhost | root | mysql_native_password | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost | mysql.session | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | root | mysql_native_password | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+---------------+-----------------------+-------------------------------------------+
4 rows in set (0.00 sec)
我这里是host 里面的 % 表示对外所有地址允许链接,是已经授权过的了。
但是有的不是,特别是8.0以上的版本需要单独处理。
对于非8.0以上的版本,可以用以下方式处理:
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
或者
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
如果
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
命令执行不成功,可更换成
grant all privileges on *.* to 'root'@'%' with grant option;
其中可以通过‘root’@'ip' 的形式来指定允许访问ip地址,具体的请自行查找。
而对于8.0以上的版本,需要创建用户,并对用户授权:
对于8.0以上需要创建用户再授权:
create user 'test'@'%' identified by '123456';
grant all privileges on *.* to test@'%' with grant option;
flush privileges;
授权完以后查看是否成功
select host,user,plugin,authentication_string from mysql.user;
处理完毕以后:退出mysql
退出mysql
exit;
退出docker
exit;
最后,查看一下是否在阿里云的管理后台把mysql 需要的端口打开,以及阿里云服务器上面的防火墙状态,如果开着防火墙,需要把对应的端口开放出来。
命令总结:
docker search mysql 搜索docker 镜像
docker pull mysql:5.7.28 拉取指定版本镜像
启动镜像并挂载
docker run --name mysql_13306 -d -e MYSQL_ROOT_PASSWORD=123456 -v /data/tadopDataProject/mysql/13306/data:/var/lib/mysql -v /data/tadopDataProject/mysql/13306/conf:/etc/mysql/ -p 13306:3306 mysql:5.7.28
进入容器内
docker exec -it mysql_13306 bash
登录
mysql -u root -p
查看端口
show global variables like 'port';
查看版本
select VERSION();
查看授权用户
select host,user,plugin,authentication_string from mysql.user;
授权
grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
grant all privileges on *.* to 'root'@'%' with grant option;
创建用户
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
修改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
刷新
flush privileges;
端口检测
netstat -anp |grep 13306