docker安装mysql,忽略表名大小写
一:下载mysql镜像
docker pull mysql:5.7
docker pull mysql:8.0.30
不接版本号就下载最新版本,或者docker pull mysql:latest
下载完后查看docker镜像
二:运行容器
创建一个目录作为和容器的映射目录
mkdir -p /data/mysql/data
下面是运行指定版本
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /data/mysql/data:/var/lib/mysql mysql:8.0.30 --lower_case_table_names=1
参数说明:
—name启动容器设置容器名称为mysql
-p 3306:3306 :映射容器服务的 3306 端口到宿主机的 3306 端口,外部主机可以直接通过 宿主机ip:3306 访问到 MySQL 的服务。
-v设置容器目录/var/lib/mysql映射到本地目录/data/mysql/data
MYSQL_ROOT_PASSWORD=123456:设置 MySQL 服务 root 用户的密码。
-itd 其中的-d后台运行容器mysql并返回容器id
lower_case_table_names=1:忽略大小写,不然linux下mysql表明是默认忽略大小写的
注意在指定,lower_case_table_names=1的时候,可能会出现错误:Different lower_case_table_names settings for server ('1') and data dictionary ('0')。很有可能是因为挂载目录以前跑过mysql服务,所以还保留以前的设置了,所以解决方法就是换一个挂载目录,或者把以前的内容清空一下。还有要注意这个忽略大小写的问题,只有在初始化的时候设置才有效,启动后修改配置文件后在重启是有问题的哦
使用docker ps查看是否安装成功:
也可以直接下面这样简单的运行
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
这样没有指定镜像的版本,只指定了镜像名称叫mysql。而且也没有挂载目录。
三:本地连接
1:先进入容器
docker exec -it mysql bash
(注意有时候因为格式因为直接命令直接复制进去可能不行,自己敲一遍就好了)
进入后可以查看一下mysql的版本号:
2:使用命令连接mysql
mysql -u root -p
3:连接上了就可以进行一点操作了
准备下班了,剩下的后面在写
四:远程连接。修改密码
默认支持了远程连接,如果不行的,可以去阿里云的安全组看看对应的端口是否开放了。如果还不行的可以尝试一下执行以下的步骤
进入容器:
docker exec -it 容器id bash
(注意有时候因为格式因为直接命令直接复制进去可能不行,自己敲一遍就好了)
进入mysql:
mysql -uroot -p
授权:
mysql> GRANT ALL ON *.* TO 'root'@'%';
完整一点的写法:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;(这句话好像有一点点问题,执行上面那句即可)
其实就是设置让用户支持远程连接(查询mysql下用户表效果)
刷新权限:
mysql> flush privileges;
更新加密规则:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
更新root用户密码:
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
刷新权限:
mysql> flush privileges;
使用完后可以使用exit退出命令行