准备
1.已经按照好docker
2.docker已拉取mysql docker pull mysql
启动mysql
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
-e:设置环境变量,此处MYSQL_ROOT_PASSWORD=root配置mysql的root用户的登陆密码为root
用客户端连接,会发现报错,可能是mysql8.0才会有的问题
出现cachin_sha2_password的解决办法:
终端输入:
#进入mysql的容器
docker exec -it mysql-test bash
#登录mysql,然后输入docker run时配置的密码(root)
mysql -u root -p
用下面的sql看有没有远程用户
use mysql
select host,user from user
如果看到有两个root用户,一个的host=localhost,另一个host=%,host=%代表这个用户是可以远程访问的
如果已经存在host=%的root用户,可以依次执行下面sql语句,就可以解决上面cachin_sha2_password的问题了,如果没有远程用户,可以滑到下面“创建用户”的标题,先进行创建用户
#修改密码规则
ALTER USER 'root'@'%' PASSWORD EXPIRE NEVER;
#更新用户密码,密码设置为root,也可以改成别的
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#刷新权限
FLUSH PRIVILEGES;
然后用root,密码root就可以顺利连接了
修改密码
若需要修改密码,可使用下面的sql
# IDENTIFIED BY 'password' -> 把密码改成password
ALTER USER 'root'@'%' IDENTIFIED BY 'password';
创建用户
如果上面没有远程的root用户,可以使用下面的sql
#添加远程登录用户root,密码为password
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
#授予全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
建立目录映射
有时候不小心容器关了,数据就没了,希望数据能够保存在硬盘上,进行持久化,就需要建立目录映射了
首先需要建立保存的文件夹,我这里保存在了/usr下(-p会自动创建父文件夹)
mkdir -p /usr/docker/mysql/config /usr/docker/mysql/data
然后启动命令添加个-v:
-v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
docker run -itd --name mysql-test -p 3306:3306 -v /usr/docker/mysql/config:/etc/mysql/conf.d -v /usr/docker/mysql/data:/var/lib/mysql -m 500m -e MYSQL_ROOT_PASSWORD=root mysql
比上面的命令多了三个:
-v /usr/docker/mysql/config:/etc/mysql/conf.d ------挂载配置文件
-v /usr/docker/mysql/data:/var/lib/mysql -------------挂载数据文件
-m 500m -----------------------------------------------------限制内存使用大小
配置文件 /config 挂载到容器内 /etc/mysql/conf.d(挂载点存疑,不起作用???)
数据文件 /data 挂载到容器内 /var/lib/mysql
首次启动还是需要像上面那样配置好,以后容器就算remove了,只要挂载了data目录,数据还会保留的