Snap安装的MySQL在Ubuntu上无法启动
Snap包管理器安装的
mysql(实际是
mysql-server)默认不启用服务,且监听地址绑定为
127.0.0.1:3306,但更关键的是:Snap版本的MySQL**不提供传统
/etc/mysql/my.cnf配置入口**,所有配置必须通过
snap set命令修改。直接编辑
/var/snap/mysql/common/my.cnf会被忽略,重启后还原。 确认服务状态:
snap services mysql—— 多数情况显示
inactive启用服务:
snap start mysql(不是
systemctl start mysql) 查看日志定位失败原因:
sudo snap logs mysql,常见报错如
Can't start server: Bind on TCP/IP port: Address already in use,说明端口被其他MySQL实例(如apt安装版)占用
如何修改bind-address和root密码
Snap版MySQL不允许直接改
my.cnf,所有运行时参数必须用
snap set注入。但注意:部分参数(如
bind-address)需配合
mysql.server服务重启生效,且**不能设为
0.0.0.0以外的值(如
192.168.1.100)**,否则启动失败。 开放远程访问:
snap set mysql server.bind-address=0.0.0.0设置root密码(首次初始化后才生效):
snap set mysql server.root-password="your_secure_password"重启服务使配置生效:
snap restart mysql验证绑定:
ss -tlnp | grep :3306应显示
*:3306而非
127.0.0.1:3306
连接失败:Access denied for user 'root'@'localhost'
Snap安装的MySQL默认使用
auth_socket插件认证root用户,这意味着它**不校验密码,而是检查Unix socket所属用户**。当你用
mysql -u root -p连接时,即使输对密码也会拒绝——因为客户端走TCP连接(
localhost被解析为
127.0.0.1),而
auth_socket只认本地socket。 临时绕过:用
mysql -S /var/snap/mysql/common/run/mysqld.sock -u root(走socket) 永久切换为密码认证:
mysql -S /var/snap/mysql/common/run/mysqld.sock -u root -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;"若需从远程连接,还需创建新用户:
mysql -S /var/snap/mysql/common/run/mysqld.sock -u root -e "CREATE USER 'admin'@'%' IDENTIFIED BY 'strong_pass'; GRANT ALL ON *.* TO 'admin'@'%'; FLUSH PRIVILEGES;"
数据目录不可直接访问,备份需用mysqldump
Snap应用的数据严格隔离在
/var/snap/mysql/common/下,且
/var/snap/mysql/current/是只读符号链接。你无法直接复制
ibdata1或
ib_logfile*做物理备份——Snap会阻止写入、挂载点权限受限。 唯一可靠备份方式:
mysqldump --socket=/var/snap/mysql/common/run/mysqld.sock -u root -p database_name > backup.sql恢复时注意socket路径:
mysql --socket=/var/snap/mysql/common/run/mysqld.sock -u root -p database_name不要尝试
chown或
chmod修改
/var/snap/mysql下的任何文件,Snap守护进程会重置权限
Snap版MySQL省去了手动编译和依赖管理,但把配置权收归snapd,所有操作必须绕过传统Linux习惯。最易被忽略的点是:它没有
systemctl服务单元,不响应
/etc/mysql/下的任何改动,且socket路径固定为
/var/snap/mysql/common/run/mysqld.sock——连这个路径写错一个字符都会导致连接失败。
