Linux上mysql配置以及docker启动mysql


linux下载mysql

文件下载

  • 官方下载文件传输到服务器
  • 链接:https://pan.baidu.com/s/1QSEcRNjn5kuutvo6qaCZwQ
    提取码:asdf

linux中mysql下载

链接:https://pan.baidu.com/s/1Ws0ToDCKrtN8rjtmBy4aNQ
提取码:asdf

linux中docker运行mysql

docker下载镜像

  • dockerhub官方下载
  • 链接:https://pan.baidu.com/s/1eTbR04qMWOzI6FLccLIdoQ?pwd=asdf
    提取码:asdf

docker运行mysql容器

docker run \
--name mysql \ 						#容器名称
-v /mydata/mysql/data:/var/lib/mysql \  #数据库存储文件作为数据卷
-v /mydata/mysql/conf:/etc/mysql/conf.d \	#数据库配置文件作为数据卷
-p 13306:3306 \						#端口映射
-e MYSQL_ROOT_PASSWORD=123 \		#配置mysql密码
-d \
mysql:5.7.25

docker run --name mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysl/conf.d -p 13306:3306 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.7.25

数据库存储文件位置

/var/lib/mysql

如果将该文件与mysql镜像产生的容器的/var/lib/mysql(容器中数据库存储文件)关联,而服务器中mysql是一直启动,如果直接使用/var/lib/mysql来关联docker容器的/var/lib/mysql,会报错

InnoDB: Cannot open datafile './ibdata1'

这是因为服务器本机mysql启用使用着这个文件。
我们需要将docker中的/var/lib/mysql与一个新建目录关联

数据库配置文件位置

/etc/my.cnf

在/mydata/mysql/conf新建文件my.cnf

touch my.cnf

并在该文件下添加

[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

docker显示容器日志信息

docker logs -f [id]

因为mysql容器报错没在运行状态使用

docker ps

是无法查找到mysql的容器id,应该使用

docker ps -a

命令
然后查看mysql容器的日志报错

2022-11-23T11:48:40.641049Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-11-23T11:48:40.642358Z 0 [Note] mysqld (mysqld 5.7.25) starting as process 1 ...
2022-11-23T11:48:40.643936Z 0 [ERROR] Could not open file '/var/log/mysqld.log' for error logging: Permission denied
2022-11-23T11:48:40.643970Z 0 [ERROR] Aborting

2022-11-23T11:48:40.643989Z 0 [Note] Binlog end
2022-11-23T11:48:40.645569Z 0 [Note] mysqld: Shutdown complete

修改/var/log/mysqld.log文件的权限
发现还是报错,使用

cat /etc/my.cnf

[mysqld]
...
log-error=/var/log/mysqld.log
...

命令,
因此修改my.cnf权限
然后开启容器

navicat无法连接到mysql容器

使用mysql密码用MYSQL_ROOT_PASSWORD配置的不能通过,而使用服务器mysql密码可以通过

修改与docker数据库存储文件关联的data目录修改其中的mysql目录(mysql用户密码存储在该目录下的user.MYD文件)

链接:https://pan.baidu.com/s/1YIQdyCGcIascgNoEdRZ3Bw
提取码:asdf

docker中的mysql不允许外界访问

使用navicat连接时报错

‘[ip]’ is not allowed to connect to this mysql

解决办法

docker无法插入中文

进入容器 查看字符集

[root@master2 ~]# docker exec -it b18f56aa1e15 /bin/bash
root@b18f56aa1e15:/# locale
LANG=
LANGUAGE=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

查看容器支持的字符集

root@b18f56aa1e15:/# locale -a
C
C.UTF-8
POSIX

不能输入中文原因:系统使用的是POSIX字符集,POSIX字符集是不支持中文的,而C.UTF-8是支持中文的 只要把系统中的环境 LANG 改为"C.UTF-8"格式即可解决问题

只要这样进入容器即可输入中文: docker exec -it b18f56aa1e15 env LANG=C.UTF-8 /bin/bash

[root@master2 ~]# docker exec -it b18f56aa1e15 env LANG=C.UTF-8 /bin/bash
root@b18f56aa1e15:/# 你好
root@b18f56aa1e15:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 80
Server version: 5.7.17-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 你好

注意:这样修改只是临时修改。要永久修改,需要在创建容器时在dockerfile中设置。
K8s进入pod不能输入中文 也可用此方法解决。

导入sql文件

docker cp yyy.sql mysql:/yyy.sql

mysql> create database yyy;
mysql> use yyy;
mysql> source yyy.sql

Unknown collation: ‘utf8mb4_0900_ai_ci‘ 的解决方案

原因

将MySQL8.0生成的sql文件,导入MySQL5.7版本时,出现了版本不兼容问题

解决

将MySQL8.0导出的sql文件中,所有的utf8mb4_0900_ai_ci替换为utf8_general_ci,以及所有的utf8mb4替换为utf8

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值