启动容器
记得关闭防火墙,或者开放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连接数据库
情况一
情况二
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插入中文的时候,就可以正常存储和读取了,但不知道为什么之前的乱码还是不能纠正,只能新插入的数据没有问题。