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/