Apple arm64架构 M 系列芯片下启动 Ubuntu 虚拟机 + 安装 mysql8.0+ + 外部访问 mysql

403 阅读4分钟

Apple arm64架构 M 系列芯片下启动 Ubuntu 虚拟机 + 安装 mysql8.0+ + 外部访问 mysql

环境:

  1. Ubuntu 20.04.1 based arch64/arm64 -> 下载链接在 b 站视频up主评论区提供
  2. Mysql 8.0.27-0ubuntu0.20.04.1

虚拟机安装

  1. 坑点: vmware fussion 12.2.0 能成功运行在 m1 上, 但无法加载 arch64 的虚拟机, youtube 有可以通过 UTM 加载的, 我没试过, 就不踩坑了, 因为通过 vm 官方的 test 已经可以实现加载虚拟机了
  2. 本次加载的虚拟机为 Ubuntu 20.04.1, 参考的视频: www.bilibili.com/video/BV1Zb…
  3. 根据视频已经可以成功运行虚拟机了

安装 mysql

  1. 通过 apt-get 安装 sudo apt-get install mysql-server
  2. 如果连 apt 都没有的话, 请百度 ubuntu 如何安装 apt 管理工具
  3. 安装完成后, 默认的登录账户密码并不在路径 /var/log/mysqld.log 上, 可能其他 linux 系统安装 mysql 会在这个路径上通过命令 sudo grep 'temporary password' /var/log/mysqld.log 查看到, 但在 ubuntu 上需要查看别的文件
  4. 通过命令 sudo cd /ect/mysql
  5. ls -al 查看得到里面有一个叫 debian.cnf 的文件, 其实 mysql 默认的初始化登录用户就在这里面
  6. 通过命令 sudo cat debian.cnf 可以查看里面有一个 host=localhost, user = debian-sys-maint, password=初始化显示的密码
  7. 通过这个用户跟密码+命令可以登录上 mysql 给 root 修改密码
  8. 先启动 mysql 服务 => sudo service mysql start
  9. 查看 mysql 服务是否开启 => service mysql status, 查看是否有 active 字样
  10. 确定开启 mysql 之后, 通过 debian.cnf 查看到的用户密码登录 mysql => mysql -udebian-sys-maint -p初始化显示的密码
  11. 成功进入 mysql
  12. 开始给 root 初始化密码
  13. 使用 mysql db => use mysql
  14. 查看所有表, 发现 user => show tables;
  15. 一般我会先查看一下几项数据 => select host, user, authentication_string, plugin from mysql.user;
  16. 开始给 root 改密码 => alter user 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '你的密码';
  17. 刷新一下权限 => flush privileges;
  18. 重新查表看看密码是否改了 => `select host, user, authentication_string, plugin from mysql.user;
  19. 成功之后, exit 退出 mysql
  20. 在终端重启 mysql => service mysql restart
  21. 然后如无意外就可以通过 mysql -uroot -p 你创建的密码 登录进去 mysql 了

网上很多教程都是使用 修改 mysqld.cnf 文件, 在里面添加 mysql-skip-grant-tables 免密码登录 mysql

但是这种做法, 登录进去系统之后, 想要修改 root 的密码会被拒绝

所以应该通过上述的 mysql 初始化的系统账户登录

查 user 表的时候也会发现这个账户会显示在表里面为 => debian-sys-maint

外部访问 mysql

步骤分为几个检查部分

a. 防火墙

  1. 先检查linux 的防火墙, ubuntu 下可以通过 sudo ufw status 查看防火墙状态
  2. 如果显示 active 或者激活, 则使用命令关闭 sudo ufw disbale
  3. 再次查看, 并确定防火墙关闭, 如果不想关闭防火墙, 可以开放有限端口通过命令 sudo ufw allow 3306 开放 mysql 3306端口
  4. 同样可以再次查看防火墙状态确认 sudo ufw status

b. ping 通网络

  1. 查看当前虚拟机的 ip 地址
  2. 如果安装有桌面环境, 可以通过网络设置图形界面查看
  3. 或者通过命令行在终端查看 ip a
  4. 或者自己下载一个 ifconfig 查看, 一般 ubuntu 默认没有安装这个工具
  5. 可以通过命令行安装 sudo apt-get install ifconfig
  6. 查看得到本机在网络的 非本地 ip 之后, 在外部终端(也就是别的电脑的终端) ping 虚拟机的ip地址
  7. 查看是否 ping 通, 如果 ping 不通, 搜索解决方案, 这部分比较好解决

c. 修改 mysql 配置文件

  1. 通过命令进入 cd /ect/mysql/mysql.conf.d
  2. ls -al 查看得到 mysqld.cnf 文件, 记住是 mysqld.cnf 最后有个 d 字母的文件
  3. 通过命令编辑 sudo vim mysqld.cnf 或者 sudo vim /ect/mysql/mysql.conf.d/mysqld.cnf
  4. 找到 bind-address = 127.0.0.1 跟 mysqlx-bind-address = 1270.0.1
  5. 一般在这两句上面会有一段注释, 大概意思就是只绑定监听特定的 ip, 不让外部连接, 比较安全
  6. 按 i (字母艾) 进入编辑模式 在两行前面输入 # 注释掉这两句 bind-addressxxx 之后
  7. 点击 esc, 然后 :wq! 保存退出
  8. 重启 mysql sudo service mysql restart

d. 修改 mysql 用户权限表

  1. 登录进去 mysql mysql -uroot -p 你设置的密码
  2. use mysql; 进入 mysql 数据库改 user 表
  3. 通过命令 alter user set user.host='%' where host='localhost' and user='root'; 修改 root 可连接的主机为任意一个(%)
  4. 或者通过命令完成远程访问授权 root 但是好像有的不行
  5. grant all on *.* to 'root'@'localhost';
    
  6. 最保险还是修改 host 为 %
  7. 通过命令检查一下 root 用户的 host 是否改成了 % (表示任意主机可以连接)
  8. select host, user from user;
  9. 循例 flush privileges; 刷新一下权限
  10. 通过命令退出 mysql => exit
  11. 重启 mysql => sudo service mysql restart

外部开始连接看看是否能连接成功吧!