1-Docker安装MySQL8.0

1 背景知识记录

1.1 MySQL 的基本配置记录

MySQL的配置文件目录(/etc/mysql):

root@2dd6033b5c17:/etc/mysql# pwd

/etc/mysql

root@2dd6033b5c17:/etc/mysql# ls

conf.d my.cnf my.cnf.fallback

MySQL的data文件目录(/var/lib/mysql):

root@2dd6033b5c17:/var/lib/mysql# pwd

/var/lib/mysql

root@2dd6033b5c17:/var/lib/mysql# ls

'#ib_16384_0.dblwr' auto.cnf binlog.index client-cert.pem ib_logfile0 ibtmp1 performance_schema server-cert.pem undo_001

'#ib_16384_1.dblwr' binlog.000001 ca-key.pem client-key.pem ib_logfile1 mysql private_key.pem server-key.pem undo_002

'#innodb_temp' binlog.000002 ca.pem

MySQL的日志文件目录(/var/log/mysql)

目前我本地该目录为空

MySQL的mysql-files文件目录(/var/lib/mysql-files)

目录是MySQL服务器默认的文件导入和导出目录。这个目录用于存储通过LOAD DATA INFILE语句导入数据或使用SELECT INTO OUTFILE语句导出数据时生成的文件。

目前我本地该目录为空,在使用docker启动时必须映射出该目录,否则会报错

2 安装

2.1 在宿主机上创建 MySQL 的映射目录

mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf /root/mysql/mysql-files

2.2 新增配置文件

在/root/mysql/conf中创建 *.cnf 文件(叫什么都行)

touch my.cnf

在配置文件中,设置表名区分大小写,在/root/mysql/conf/my.cnf添加如下内容:

[mysqld]
lower_case_table_names=1

2.3 创建容器并启动

创建容器,将数据、日志、配置文件都映射到宿主机上

docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql -v /root/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /root/mysql/logs:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/mysql-files:/var/lib/mysql-files -d mysql:8.0

docker各个参数说明:

--name:容器名
-p:映射宿主主机端口
-v:挂载宿主目录到容器目录
-e:设置环境变量,此处指定root密码
-d:后台运行容器

2.4 其他docker相关命令记录

  • 进入容器,并连接数据库
[root@VM-24-10-centos conf]# docker exec -it c6a91327ceee bash
root@c6a91327ceee:/# mysql -uroot -p
Enter password:
  • docker 重启 MySQL
docker restart c6a91327ceee

3 Q&A

3.1 MySQL8.x修改密码

当出现错误:“ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)”时,如何修改密码:

  • 修改配置文件免密登录,在my.cnf配置文件下面加上下面字段
# 登陆时候跳过密码验证
skip-grant-tables
  • 重启docker的mysql服务(如果不是在docker环境,就直接重启mysql服务就可以)
#docker环境下 
docker restart mysql  

#直接重启mysql服务 
service mysql restart  
  • 进入到docker的mysql服务中
docker exec -it mysql bash 
mysql -uroot -p 
  • 密码随便填,就能进入到sql
#选择数据库
use mysql;
#修改密码为空
update user set authentication_string='' where user='root'; 
  • 将配置文件刚才加进去的跳过密码启动注释掉或删掉,重启mysql服务
  • 再次进入mysql服务中,密码不用填写,直接回车,就可以进入到mysql
mysql -uroot -p
  • 再次修改登录密码
ALTER user 'root'@'localhost' IDENTIFIED BY '123456'; 

3.2 外部不能访问

远程的客户端方式时连接不到数据库,并报错:[HY000][1130] null, message from server: "Host '114.242.1.4' is not allowed to connect to this MySQL server"

解决:

1,登进MySQL之后,

2,输入以下语句,进入mysql库:

use mysql

3,更新域属性,'%'表示允许外部访问:

update user set host='%' where user ='root';

4,执行以上语句之后再执行:

FLUSH PRIVILEGES;

5,再执行授权语句:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

3.3 docker 容器和父主机之间文件拷贝

#docker镜像内的文件互相拷贝

1、将本地文件拷贝到docker 镜像内

 docker cp 本地路径 容器Id或name:容器目录

 docker cp /Users/howey/Documents/apache-maven-3.5.2/ containername:/opt
 

 
2、将docker内文件拷贝到本地文件夹内

  docker cp 容器Id或name:本地路径 镜像路径

  docker cp containername:/Users/howey/Documents/apache-maven-3.5.2 /opt/

你可能感兴趣的:(MySQL,docker,mysql)