环境
- CentOS 7.2
- Docker 19.03.12
- MySQL 8.0.3
安装步骤
拉取镜像
默认拉取最新版本的镜像
$ docker pull mysql
如果要指定版本,使用下面的命令
$ docker pull mysql:8.0.20
创建数据目录和配置文件
在宿主机创建放置mysql的配置文件的目录和数据目录,并且进行授权
$ mkdir -p /usr/mysql/conf /usr/mysql/data
$ chmod -R 755 /usr/mysql/
创建mysql镜像实例
$docker run -itd --name mysql8 -v /usr/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql --lower_case_table_names=1 |
参数解释:
-v : 挂载宿主机目录和 docker容器中的目录,前面是宿主机目录,后面是容器内部目录
(将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf)
-d : 后台运行容器
-p 3306:3306: 映射容器端口号和宿主机端口号(将容器的 3306 端口映射到主机的 3306 端口)
-e 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码
--lower-case-table-names=1 0是大小写敏感(默认);1是大小写不敏感;(此项不需要可不填写)
备注:lower_case_table_names=1 只能在初始化时配置
安装特定版本:
$docker run -itd --name mysql8 -v /usr/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.20 --lower_case_table_names=1 |
安装成功
通过 docker ps 命令查看是否安装成功:
授权可以通过工具连接mysql
原因:虽然安装好了mysql,但是使用远程的Navicat连接时提示错误,不能正确连接mysql。
进入docker-mysql中,授权可以通过工具连接mysql
$docker exec -it 3c09d9fa9446 sh
$mysql -u root -p
$mysql> use mysql
$ mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
例如:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
注意:
mysql_native_password,mysql8.x版本必须使用这种模式,否则navicate无法正确连接.
创建新的用户hmf和dog:
CREATE USER 'hmf'@'%' IDENTIFIED BY '123456';
CREATE USER 'cat'@'%' IDENTIFIED BY '123456';
给用户授权
命令:GRANT privileges ON databasename.tablename TO 'username'@'host'
privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名
tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
示例:
GRANT ALL ON *.* TO 'hmf'@'%';
GRANT SELECT, INSERT ON demo.* TO 'cat'@'%';
参考:
https://www.runoob.com/docker/docker-install-mysql.html