启动容器

记得关闭防火墙,或者开放3306端口。

docker run -it  --restart=always  --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 --lower_case_table_names=1

arm平台使用mysql-server

arm平台下拉区镜像

1. 找一个适用于arm64架构的MySQL镜像

docker pull mysql/mysql-server

2. 加个 --platform linux/x86_64 

docker pull --platform linux/x86_64 mysql

 启动容器

docker run -it  --restart=always  --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql/mysql-server --lower_case_table_names=1

注意

lower_case_table_names 参数MySQL 库表 大小写,默认为0
lower_case_table_names=0  表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 1  表名存储在磁盘是小写的,但是比较的时候是不区分大小写
lower_case_table_names=2 表名存储为给定的大小写但是比较的时候是小写的
unix,linux下lower_case_table_names默认值为 0 .Windows下默认值是 1 .Mac OS X下默认值是 2

所以docker启动命令中根据需求定义lower_case_table_names的值

这样docker安装mysql就完成了。

Navicat连接数据库

情况一

mysql arm版 mysql arm版本容器_mysql

情况二



Expression #2 of SELECT list is not in GROUP BY clause and contains 
nonaggregated column ‘sss.month_id’ which is not functionally 
dependent on columns in GROUP BY clause; this is incompatible with 
sql_mode=only_full_group_by

//这种错误,我百度得到的解释是MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”。)

第二种错误大部分要求你修改my.cnf配置文件,添加如下内容。
 

[mysqld] 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

我试了但是并没有生效。

解决

docker ps //查看正在运行的容器

如上图所示,

我们进入到容器中

docker exec -it 4730106799e3 bash  //注意使用容器id,而不是容器名称,网上很多都是容器名称,我这里使用容器名称是不成功的。
登录数据库
mysql -u root -p
输入密码
mysql> use mysql;
查询host
mysql> select user,host from user;
4.创建host
如果没有"%"这个host值,就执行下面这两句:
mysql> update user set host='%' where user='root';
mysql> flush privileges;
5.授权用户
任意主机以用户root和密码mypwd连接到mysql服务器
mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';  
Query OK, 0 rows affected (0.01 sec)  
mysql> grant all privileges on *.* to root@'%'  identified  by '123456';  
mysql> FLUSH PRIVILEGES;  
Query OK, 0 rows affected (0.01 sec)  
 
//运行如上内容,调整权限
 
mysql> quit //退出mysql
root@4730106799e3:/# exit //退出容器
docker restart 4730106799e3 //重新启动容器

  为此我们先进去docker mysql容器,
    docker ps 查看容器
    docker exec -it ${你的mysql容器id} /bin/bash 进入mysql容器
    cat /etc/mysql/my.cnf 进入配置文件夹
    vim /etc/mysql/mysql.conf.d/mysqld.cnf  以编辑的形式打开配置文件
    (如果vim 报错则安装vim,安装的方式和linux 系统一样)
    然后在[mysqlid]最后一条加入上面图片中的配置就OK 然后重启容器
 

mysql-server连接问题修改

 1、连接服务器: `mysql -u root -p`

2、看当前所有数据库:show databases;

3、进入mysql数据库:use mysql;

4、查看mysql数据库中所有的表:show tables;

5、查看user表中的数据:select Host, User from user;

6、修改user表中的Host: update user set Host='%' where User='root';   
说明: % 代表任意的客户端,可替换成具体IP地址。

8 、注意:一定要记得在写sql的时候要在语句完成后加上" ; "

9、 修改密码:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

10、最后刷新一下:flush privileges;
 

让MySQL支持中文 

1,创建table的时候就使用utf8编码

character set = utf8

就可以很好的支持中文。

2,修改已经有的table的编码

当使用默认编码创建了一个table的时候,是不能支持中文的,这时候使用如下语句对table_name进行修改:

alter table table_name convert to character set utf8;

此后再往这个table插入中文的时候,就可以正常存储和读取了,但不知道为什么之前的乱码还是不能纠正,只能新插入的数据没有问题。