mac系统docker运行mysql5.7

安装mysql:5.7镜像

拉取mysql:5.7镜像

docker pull mysql:5.7

启动容器

docker run -d -p 33002:3302 –name mysql-5.7-test-2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

1
-e MYSQL_ROOT_PASSWORD=123456:指定在容器启动时设置的环境变量,其中 MYSQL_ROOT_PASSWORD 是指定了 MySQL 的 root 用户的密码为 123456

进入容器

docker exec -it mysql-5.7-test-2 /bin/bash

登陆mysql

mysql -uroot -p
提示输入密码,即MYSQL_ROOT_PASSWORD=123456 这个密码

1
Enter password:

开通mysql远程访问权限

GRANT ALL PRIVILEGES ON . TO ‘root‘@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

刷新权限配置

flush privileges;

use mysql;

刷新mysql user表

select Host, User, plugin, authentication_string from user;

安装netstat 等网络命令

yum install -y net-tools

客户端

mysql -P 33002 -u root -p –protocol=tcp

1
2
3
4
5
6
--protocol=tcp 指定端口协议是tcp

如果不加这个,会提示 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

原因:Because you are running MySQL inside Docker container, socket is not available and you need to connect through TCP. Setting "--protocol" in the mysql command will change that.
于您在 Docker 容器内运行 MySQL,因此套接字不可用,您需要通过 TCP 连接。在 mysql 命令中设置“--protocol”将改变这种情况。

截屏2024-12-01-1

附录

查找my.cnf的位置

  • $ mysql –help
    可以看到文件的几个位置
    1
    2
    3
    Default options are read from the following files in the given order:
    /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
    如果一个配置出现在多个文件中,后面的会覆盖前面的

截屏2024-12-01-2

查看mysql server 端口

  • $ mysql> SHOW GLOBAL VARIABLES LIKE ‘PORT’;
    1
    2
    3
    4
    5
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | port | 3306 |
    +---------------+-------+

Dockerfile创建与运行mysql

1
2
3
4
5
6
7
8
FROM mysql:5.7

# 改默认端口 将端口号更新到文件:/etc/mysql/my.cnf or /etc/my.cnf
RUN sed -i 's/port\s*=\s*3306/port = 3406/' /etc/mysql/my.cnf

EXPOSE 3406

CMD ["mysqld"]