docker 安装部署MySQL 5.7

4,483 阅读4分钟

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 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时会自动恢复。但是,如果没有删除表,就进行了此操作,那么会在数据库出现一张大写的表和同名的小写表。