docker 安装部署MySQL 5.7
Posted 守夜人爱吃兔子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 安装部署MySQL 5.7相关的知识,希望对你有一定的参考价值。
拉取mysql5.7镜像
docker pull mysql:5.7 # 拉取 mysql 5.7
docker pull mysql # 拉取最新版mysql镜像
#查看镜像是否拉取成功
docker images
构建MySQL数据库容器
docker run -d -e \\
MYSQL_ROOT_PASSWORD=123456 --name mysql-5.7 \\
-v /bjfc/docker/mysql/data:/var/lib/mysql \\
-v /etc/localtime:/etc/localtime \\
-p 3306:3306 \\
mysql:5.7
- –name:容器名,此处命名为mysql-5.7
- -e:配置信息,此处配置mysql的root用户的登陆密码
- -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
- -d:后台运行容器,保证在退出终端后容器继续运行
- -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录
注意:这里需要关注/etc/localtime这个文件目录的映射,docker容器中的时间使用的是“标准时间”,与“北京时间”相差8小时,这里解决办法有很多,这只是其中的一种解决办法,能保证存储时间的正确性
查看MySQL容器,登录MySQL
docker ps #查看所有容器
docker exec -it mysql-5.7 /bin/bash #进入docker容器中
mysql -uroot -pfc888888 #登录MySQL
使用远程连接软件时要注意一个问题
#登录mysql
mysql -u root -p
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456 ';
#添加远程登录用户
CREATE USER 'hctm'@'%' IDENTIFIED WITH mysql_native_password BY '123456 ';
GRANT ALL PRIVILEGES ON *.* TO 'hctm'@'%';
#或者用下面的方法开通远程访问权限
#grant all privileges on *.* to root@'%' identified by "123456";
# mysql使用mysql数据库中的user表来管理权限,修改user表就可以修改权限(只有root账号可以修改)
mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> grant all privileges on *.* to root@'%' identified by "password";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,password from user;
+--------------+------+-------------------------------------------+
| host | user | password |
+--------------+------+-------------------------------------------+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+--------------+------+-------------------------------------------+
3 rows in set (0.00 sec)
在容器内,MySQL表名大小写问题
此操作对于有强迫症的码农非常有用,能解决你内心的痛苦 解决此问题只需要知道两点
- 修改mysqld.conf 配置参数:lower_case_table_names 不同系统,该参数的默认值是不同的。
- lower_case_table_names = 1 表名存储在磁盘是小写的,但是比较的时候是不区分大小写
- lower_case_table_names=0 表名存储为给定的大小和比较是区分大小写的
- lower_case_table_names=2, 表名存储为给定的大小写但是比较的时候是小写的
注:windows环境默认 0:linux环境默认 2:macos环境默认
- MySQL容器内部mysqld.conf配置文件在:/etc/mysql/mysql.conf.d
docker exec -it mysql-5.7 /bin/bash
mysql -u root -p #登录MySQL
mysql> show global variables like '%lower_case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
+------------------------+-------+
2 rows in set (0.01 sec)
#lower_case_file_system表示当前系统文件是否大小写敏感,只读参数,无法修改。
#ON表示大小写不敏感。
#OFF表示大小写敏感。
#由于在容器中未安装vi或vim,所以将配置文件从容器复制出来,修改之后再复制到容器内。
#将文件从容器中复制到宿主机/data目录:
#通过exit 命令退出MySQL数据,在通过exit命令退出容器,进入的data文件夹
cd /data
docker cp mysql-5.7:/etc/mysql/mysql.conf.d/mysqld.cnf /data #将mysqld.cnf文件复制到data文件夹
vim mysqld.cnf #修改文件
[mysqld]
lower_case_table_names=1
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
"mysqld.cnf" 39L, 1635C
#修改完成后再将 mysqld.cnf 文件cp到docker容器中
docker cp /data/mysqld.cnf mysql-5.7:/etc/mysql/mysql.conf.d
docker restart mysql-5.7 # 容器MySQL容器
#登录MySQL数据,查看修改后结果
mysql> show global variables like '%lower_case%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| lower_case_file_system | OFF |
| lower_case_table_names | 1 |
+------------------------+-------+
2 rows in set (0.01 sec)
此操作可以解决MySQL表名大小写问题,尤其对于activiti自动建立的表有奇效,会将表明统一小写仅此而已(解决强迫症)。 注意: 此操作在已存在表的数据库进行操作时,需要注意将已经大写的表进行备份,并且删除,在执行上面操作后,在将保存的表数据进行恢复即可。如无备份,你在上进行以上操作的时候,会将你所有大写的表进行隐藏,只是隐藏,修改lower_case_table_names =0时会自动恢复。但是,如果没有删除表,就进行了此操作,那么会在数据库出现一张大写的表和同名的小写表。笔者强迫症非常严重,如无此需求,可忽略。
最后
最近我整理了整套《JAVA核心知识点总结》,说实话 ,作为一名Java程序员,不论你需不需要面试都应该好好看下这份资料。拿到手总是不亏的~我的不少粉丝也因此拿到腾讯字节快手等公司的Offer
进【Java进阶之路群】,找管理员获取哦-!
以上是关于docker 安装部署MySQL 5.7的主要内容,如果未能解决你的问题,请参考以下文章
Docker部署NMP+Composer+(SwooleRedis扩展)
docker docker-compose部署mysql和redis