Apple arm64架构 M 系列芯片下启动 Ubuntu 虚拟机 + 安装 mysql8.0+ + 外部访问 mysql
环境:
- Ubuntu 20.04.1 based arch64/arm64 -> 下载链接在 b 站视频up主评论区提供
- Mysql 8.0.27-0ubuntu0.20.04.1
虚拟机安装
- 坑点: vmware fussion 12.2.0 能成功运行在 m1 上, 但无法加载 arch64 的虚拟机, youtube 有可以通过 UTM 加载的, 我没试过, 就不踩坑了, 因为通过 vm 官方的 test 已经可以实现加载虚拟机了
- 本次加载的虚拟机为 Ubuntu 20.04.1, 参考的视频: www.bilibili.com/video/BV1Zb…
- 根据视频已经可以成功运行虚拟机了
安装 mysql
- 通过 apt-get 安装
sudo apt-get install mysql-server
- 如果连 apt 都没有的话, 请百度 ubuntu 如何安装 apt 管理工具
- 安装完成后, 默认的登录账户密码并不在路径
/var/log/mysqld.log
上, 可能其他 linux 系统安装 mysql 会在这个路径上通过命令sudo grep 'temporary password' /var/log/mysqld.log
查看到, 但在 ubuntu 上需要查看别的文件 - 通过命令
sudo cd /ect/mysql
ls -al
查看得到里面有一个叫debian.cnf
的文件, 其实 mysql 默认的初始化登录用户就在这里面- 通过命令
sudo cat debian.cnf
可以查看里面有一个 host=localhost, user = debian-sys-maint, password=初始化显示的密码 - 通过这个用户跟密码+命令可以登录上 mysql 给 root 修改密码
- 先启动 mysql 服务 =>
sudo service mysql start
- 查看 mysql 服务是否开启 =>
service mysql status
, 查看是否有 active 字样 - 确定开启 mysql 之后, 通过 debian.cnf 查看到的用户密码登录 mysql =>
mysql -udebian-sys-maint -p初始化显示的密码
- 成功进入 mysql
- 开始给 root 初始化密码
- 使用 mysql db =>
use mysql
- 查看所有表, 发现 user =>
show tables;
- 一般我会先查看一下几项数据 =>
select host, user, authentication_string, plugin from mysql.user;
- 开始给 root 改密码 =>
alter user 'root'@'localhost' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY '你的密码';
- 刷新一下权限 =>
flush privileges;
- 重新查表看看密码是否改了 =>
`select host, user, authentication_string, plugin from mysql.user;
- 成功之后,
exit
退出 mysql - 在终端重启 mysql =>
service mysql restart
- 然后如无意外就可以通过
mysql -uroot -p 你创建的密码
登录进去 mysql 了
网上很多教程都是使用 修改 mysqld.cnf 文件, 在里面添加
mysql-skip-grant-tables
免密码登录 mysql但是这种做法, 登录进去系统之后, 想要修改 root 的密码会被拒绝
所以应该通过上述的 mysql 初始化的系统账户登录
查 user 表的时候也会发现这个账户会显示在表里面为 => debian-sys-maint
外部访问 mysql
步骤分为几个检查部分
a. 防火墙
- 先检查linux 的防火墙, ubuntu 下可以通过
sudo ufw status
查看防火墙状态 - 如果显示 active 或者激活, 则使用命令关闭
sudo ufw disbale
- 再次查看, 并确定防火墙关闭, 如果不想关闭防火墙, 可以开放有限端口通过命令
sudo ufw allow 3306
开放 mysql 3306端口 - 同样可以再次查看防火墙状态确认
sudo ufw status
b. ping 通网络
- 查看当前虚拟机的 ip 地址
- 如果安装有桌面环境, 可以通过网络设置图形界面查看
- 或者通过命令行在终端查看
ip a
- 或者自己下载一个 ifconfig 查看, 一般 ubuntu 默认没有安装这个工具
- 可以通过命令行安装
sudo apt-get install ifconfig
- 查看得到本机在网络的 非本地 ip 之后, 在外部终端(也就是别的电脑的终端)
ping 虚拟机的ip地址
- 查看是否 ping 通, 如果 ping 不通, 搜索解决方案, 这部分比较好解决
c. 修改 mysql 配置文件
- 通过命令进入
cd /ect/mysql/mysql.conf.d
ls -al
查看得到 mysqld.cnf 文件, 记住是 mysqld.cnf 最后有个 d 字母的文件- 通过命令编辑
sudo vim mysqld.cnf
或者sudo vim /ect/mysql/mysql.conf.d/mysqld.cnf
- 找到 bind-address = 127.0.0.1 跟 mysqlx-bind-address = 1270.0.1
- 一般在这两句上面会有一段注释, 大概意思就是只绑定监听特定的 ip, 不让外部连接, 比较安全
- 按 i (字母艾) 进入编辑模式 在两行前面输入 # 注释掉这两句 bind-addressxxx 之后
- 点击 esc, 然后 :wq! 保存退出
- 重启 mysql
sudo service mysql restart
d. 修改 mysql 用户权限表
- 登录进去 mysql
mysql -uroot -p 你设置的密码
use mysql;
进入 mysql 数据库改 user 表- 通过命令
alter user set user.host='%' where host='localhost' and user='root';
修改 root 可连接的主机为任意一个(%) - 或者通过命令完成远程访问授权 root 但是好像有的不行
-
grant all on *.* to 'root'@'localhost';
- 最保险还是修改 host 为 %
- 通过命令检查一下 root 用户的 host 是否改成了 % (表示任意主机可以连接)
select host, user from user;
- 循例
flush privileges;
刷新一下权限 - 通过命令退出 mysql =>
exit
- 重启 mysql =>
sudo service mysql restart
外部开始连接看看是否能连接成功吧!