MANKA の Blog
在树莓派上使用mysql

2022-11-04

#Docker#MySQL#水

文章目录

众所周知,MySQL8.0是支持 arm64 架构的,毕竟 M1 的Mac系列也能用这玩意;然而,debian上并没有支持的ppa以供添加,只能自行编译,但用树莓派来编译这玩意属实是在为难它,而交叉编译的流程看得我头都大,所以我找到了另一个曲线救国的办法:Docker

前情

在树莓派的源里,默认用是MySQL的替代之一:MariaDB

~ apt search ^mysql-common$Sorting... DoneFull Text Search... Donemysql-common/unknown,unknown,now 1:10.6.10+maria~deb11 all [residual-config]  MariaDB database common files (e.g. /etc/mysql/my.cnf)

毕竟 MariaDB 是从 MySQL 5.x时代 fork 出来的产品,不少 MySQL8.0 的新特性就没了,比如 Twitter Monitor 用到的的函数 ANY_VALUE(),又或者是用于全文搜索的解析器 ngram……MariaDB与MySQL之间在大的方向上是兼容的,但在一些细节上的不兼容让我在开发 Twitter Monitor 时还是挺难受的

过程

  • 首先当然是备份了所有库啦,我刚好在用 phpmyadmin 所以点点点就把库下载回来了,大伙也可以用命令,其中这里的DB1 以及后面那些数据库名称改成自己的库名
    #我放在根目录只是为了后面导入时不用打一大堆路径mysqldump -uroot -p --databases DB1 [DB2 DB3...] > /backup.sql
  • 然后就是删掉全部 MariaDB 的内容,至于要不要删掉 /var/lib/mysql 可以随个人喜好,不删留着纪念也可以,但后面就需要找一个新的目录放来自 container 的文件
    apt remove mariadb-common && apt autoremove && rm -rf /var/lib/mysql
  • 再然后就是拉镜像跑起来,我不会写 docker composer,所以直接跑好了
    docker pull mysql:latest

    可以将原本位于 /etc/mysql/mariadb.conf.d 的那些自定义配置拷贝到 conf.d,然后开跑,其中这个 YOUR_PASSWORD 应该改成自己的密码
    docker run -p 3306:3306 --name mysql -v /etc/mysql/conf.d:/etc/mysql/conf.d MYSQL_ROOT_PASSWORD=YOUR_PASSWORD -d mysql

    等一会就可以将内部使用的数据文件夹拷贝到宿主机了
    docker cp mysql:/var/lib/mysql/ /var/lib/

    停掉 container,打开container所在的目录,编辑 config.v2.json,往 MountPoints 字段加上宿主机的目录,改完以后差不多就是这样的
    {       ...    "MountPoints": {        "/etc/mysql/conf.d": {            "Source": "/etc/mysql/conf.d",            "Destination": "/etc/mysql/conf.d",            "RW": true,            "Name": "",            "Driver": "",            "Type": "bind",            "Propagation": "rprivate",            "Spec": {                "Type": "bind",                "Source": "/etc/mysql/conf.d",                "Target": "/etc/mysql/conf.d"            },            "SkipMountpointCreation": false        },        "/var/lib/mysql": {            "Source": "/var/lib/mysql",            "Destination": "/var/lib/mysql",            "RW": true,            "Name": "",            "Driver": "",            "Type": "bind",            "Propagation": "rprivate",            "Spec": {                "Type": "bind",                "Source": "/var/lib/mysql",                "Target": "/var/lib/mysql"            },            "SkipMountpointCreation": false        }    }    ...}
  • 保存以后就可以重新启动了 container 了,然后把备份导进去,其中这个 YOUR_PASSWORD 应该改成自己的密码
    docker exec -i mysql mysql -uroot -p YOUR_PASSWORD < /backup.sql

    启动前建议关掉binlog以提高导入效率
    #my.cnf[mysqld]skip-log-bin
  • 前面忘了,中间忘了,后面忘了,总之需要把各种配置中的 localhost 改成 127.0.0.1,然后就可以继续喜闻乐见地玩耍了

其实我就是来水文章的,现在水完了


评论区