服务器mysql安装-docker容器化(保姆级教学)
镜像下载
- 基本功,自己下载,后续我会开个文章单独补充下相关链接
在服务器进行mysql安装-启动mysql容器
docker run –name mysql -p 3306:3306 –privileged=true \\
-v /data/mysql/data:/var/lib/mysql \\
-v /data/mysql/log:/var/log/mysql \\
-v /etc/localtime:/etc/localtime \\
-v /data/mysql/my.cnf:/etc/mysql/my.cnf \\
-e MYSQL_ROOT_PASSWORD=qwe123asd \\
-d mysql:latest
注释
-v 是将你自己的本地文件 映射到容器中 目的是为了让mysql的数据能够持久化在本地,方便后续数据的迁移等,这里:的前半部分是你自己的路径,可以按照自己的需求更改,但是:的后半部分(即:右侧不能够更改) -e MYSQL_ROOT_PASSWORD=你自己的密码
本机使用Navicat /SqlLog/Dbeaver等数据库管理工具连接数据库
- 第一种是firewall
systemctl status firewalld
如果开了,如图 请使用systemctl stop firewalld关闭防火墙
- 第二种是ufw
ufw status
请使用systemctl stop ufw关闭防火墙 2. 关闭防火墙后使用Navicat测试能否连接 按照我的docker命令正常是能够连接的
如果无法连接比如Can’t connect to MySQL server
- 检查MySQL绑定地址 在容器内修改MySQL配置文件(或挂载宿主机的my.cnf ):
bind-address = 0.0.0.0 # 允许所有IP连接
或者直接注释bind-address
- 验证远程访问权限
docker exec -it mysql bash #先进入Mysql容器
mysql -uroot #然后进入数据库,输入上述你的命令
use mysql;
select host,user from user; # 看看有没有% | root 权限
CREATE USER 'root'@'%' IDENTIFIED BY '密码'; #没有就创建
grant all privileges on *.* to 'root'@'%' with grant option; #赋予root所有权限
FLUSH PRIVILEGES; #刷新缓存
exit #退出容器
systemctl restart mysql #重启容器
在没有开防火墙的情况下,以上两步定能让你在主机用数据库管理工具连接mysql
必须要开防火墙,如何使得在主机用数据库管理工具连接mysql
这里仅用firewall来举例,ufw类似,请根据步骤自行百度即可
systemctl status firewalld #检查是否开启防火墙
systemctl start firewalld #没开防火墙开开
firewall-cmd –permanent –zone=public –change-interface=docker0
firewall-cmd –reload
firewall-cmd –get-active-zones
输出应包含:
public
interfaces: docker0
firewall-cmd –zone=public –add-port=3306/tcp –permanent
firewall-cmd –reload
firewall-cmd –zone=public –list-ports #如果在输出应包含3306
firewall-cmd –list-all
mysql设置表名或列名大小写不敏感
SHOW VARIABLES LIKE 'lower_case_table_names';
结果:
0:表名和列名大小写敏感(区分大小写)。 1:MySQL 会将所有表名自动转换为小写,并且不区分大小写。 2:表名存储为指定的大小写,但在比较时会自动转换为小写。
[mysqld]
lower_case_table_names = 0 # 0区分大小写,1不区分大小写,2存储时区分大小写但比较时不区分
重启容器 进入 MySQL 客户端,查询 lower_case_table_names 参数:
docker exec –it <mysql_container_id> mysql –uroot –p
SHOW VARIABLES LIKE 'lower_case_table_names';
docker stop mysql && docker rm mysql
重新执行命令
docker run –name mysql -p 3306:3306 –privileged=true \\
–v /data/mysql/data:/var/lib/mysql \\
–v /data/mysql/log:/var/log/mysql \\
–v /etc/localtime:/etc/localtime \\
–v /data/mysql/my.cnf:/etc/mysql/my.cnf \\
–e MYSQL_ROOT_PASSWORD=qwe123asd \\
–d mysql:latest –lower_case_table_names=1
上面命令如若不生效,请使用如下命令
docker run –name mysql -p 3306:3306 –privileged=true \\
–v /data/mysql/data:/var/lib/mysql \\
–v /data/mysql/log:/var/log/mysql \\
–v /etc/localtime:/etc/localtime \\
–v /data/mysql/my.cnf:/etc/mysql/my.cnf \\
–e MYSQL_ROOT_PASSWORD=qwe123asd \\
–e LOWER_CASE_TABLE_NAMES=1 \\
–d mysql:latest
完毕,后面补充一些关于mysql或者Mariadb的一些踩过的坑
评论前必须登录!
注册