Mac安装Docker的Mysql,并把Mysql的Data数据文件夹挂载到SSD移动硬盘中,转移Mac的硬盘1000GB的压力。

7 篇文章 0 订阅
2 篇文章 0 订阅

问题场景:

Mac本地跑的Mysql数据超过1000GB,然后需要把Docker当做MySQL启动的容器 , 把Mac当做宿主机器接入局域网让其他机器使用MySQL服务区(SSD的移动硬盘也有1000MB/S的读取和写入,不必Mac本地的硬盘读写速度差)。

安装Mac的Docker:

Docker Desktop for Mac and Windows | Docker

下载桌面版安装即可,傻瓜式操作。

Docker镜像仓库中下载MySQL:

点击:Docker的镜像仓库

# 下载最新版本的mysql镜像
  ~] docker pull  mysql:latest
# 下载指定版本的mysql镜像
  ~] docker pull  mysql:5.7

在SSD的移动硬盘创建文件夹:

直接可视化桌面邮件创建:

mysql/data
mysql/mysql-files

在Teminal终端中启动MySQL:

sudo docker run -p 3306:3306 --name 在Docker中的MySQL别名(比如:MyMySQL) -v /var/run/docker.sock:/var/run/docker.sock -v /etc/my.cnf:/etc/mysql/my.cnf -v  /Volumes/移动硬盘的盘符名称/mysql/data:/var/lib/mysql -v /Volumes/移动硬盘的盘符名称/mysql/mysql-files:/var/lib/mysql-files/  -e MYSQL_ROOT_PASSWORD=你的MySQL验证密码 -d --user 2034:50 mysql

 

 解释:

参数说明
-p 3307:3306;将容器的3306端口映射到主机的3307端口   --name  把mysql容器命名 叫MyMySQL

-v 目录挂载:

-v /Volumes/移动硬盘的盘符名称/mysql/data:/var/lib/mysql 将docker的实例数据源data文件夹挂载到主机

-v /Volumes/移动硬盘的盘符名称/mysql/mysql-files:/var/lib/mysql-files/ 将docker的mysql-files文件夹载到主机

-v /etc/my.cnf:/etc/mysql/my.cnf 将docker的配置文件夹挂载到主机   


-e MYSQL_ROOT_PASSWORD=root 初始化root用的密码

服务器重启后启动docker下的容器 docker container start mysql

MySQL 修改字符集utf8mb4:

mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

修改 /etc/my.cnf文件内容

[client]  
default-character-set=utf8mb4  
#password   = your_password  
port        = 3306 
socket      = /tmp/mysql.sock  

# Here follows entries for some specific programs  

# The MySQL server   
[mysqld]  
default-storage-engine=INNODB  
character-set-client-handshake = FALSE
character-set-server=utf8mb4 
collation-server=utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4’  

重启MySQL容器

docker restart 镜像名jasghdjgasghjdasgjh

重新查看下MySQL字符集

mysql> show variables like 'character%';

MySQL 关闭 binlog

MySQL默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,在/usr/local/mysql /var/下面产生mysql-bin.0000* 类似的文件,而且一般都在几十MB到几个GB,更甚会吃掉整个硬盘空间。

如何关闭MySQL的日志功能:

修改/etc/my.cnf 文件,找到

log-bin=mysql-bin
binlog_format=mixed

再这两行前面加上#,将其注释掉。

#log-bin=mysql-bin
#binlog_format=mixed

重启MySQL容器

docker restart 镜像名jasghdjgasghjdasgjh

测试MySQL:

至此,安装一切正常的都可以在上图Navicat中测试链接成功。Mac成功把1000GB的数据转移到移动硬盘,缓解Mac的硬盘压力。

但是,如果能一帆风顺的话,也不会写出这篇文章。下面列出我遇到的问题和解决办法:

问题1: 

使用此命令启动时,输出日志为:

chown: changing ownership of '/var/lib/mysql/': Operation not permitted

注意哈:是Operation not permitted,不是Permission denied,后者还容易解决。

很明显是/var/lib/mysql 这个文件夹不属于user的,是属于root,所以参考:

chown: changing ownership of '/var/lib/mysql/': Operation not permitted · Issue #396 · docker-library/mysql · GitHub

chown: changing ownership of '/var/lib/mysql/': Operation not permitted · Issue #149 · MariaDB/mariadb-docker · GitHub

两篇文章的解决办法为 在docker命令行后面加上  --user 2034:50   然后mysql以user的权限启动即可

问题2:

Warning: World-writable config file ‘/etc/my.cnf’ is ignored

此语句虽然是Warning,但是影响已经比警告⚠️大!

看似MySQL实例起来了,其实没有加载/etc/my.cnf配置文件,如果不注意Warning信息,很容易留坑。

主要原因:MySQL出于安全的考虑,担心其他用户可以恶意修改my.cnf配置文件,所以忽略掉这个配置文件。

解决办法:

查看my.cnf的权限,
ls -l /etc/my.cnf
-rwxrwxrwx 1 root root 1404 Oct 16 19:31 /etc/my.cnf , 发现是777权限
chmod 644 /etc/my.cnf , 设置为644权限
docker container start mysql , 一切OK

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值