Android8.0安装apk报错:Package xxx is currently frozen

问题出现
App版本更新时,使用Android 8.0的手机会出现问题:安装包下载完成之后,屏幕闪了一下并没有跳转到安装界面,使用8.0以下的手机并没有这个问题,查看异常信息,发现如下警告

java.lang.SecurityException: Package com.example.xx.allrun is currently frozen!

原因分析
Android 8.0 Oreo 中,Google 移除掉了容易被滥用的“允许位置来源”应用的开关,在安装 Play Store 之外的第三方来源的 Android 应用的时候,竟然没有了“允许未知来源”的检查框,如果你还是想要安装某个被自己所信任的开发者的 app,则需要在每一次都手动授予“安装未知应用”的许可

解决方法
1、为了适配8.0需要增加以下权限

<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

在应用下载完成进入安装界面之前会弹出如下对话框:
在这里插入图片描述
点击外部来源

在这里插入图片描述
打开允许开关,点击返回键自会进入安装界面(安装流程略)

2、接下来我们写点代码更好的处理一下这一新变更

 /**
     * 判断是否是8.0,8.0需要处理未知应用来源权限问题,否则直接安装
     */
   
<think>我们正在处理用户关于MySQL 8.0 MHA报错"There is no alive server We can't do failover"的问题。 根据引用内容,MHA是一个成熟的MySQL高可用解决方案,能够在短时间内自动完成故障切换并保证数据一致性。 但是,在MySQL 8.0中部署MHA时可能会遇到一些兼容性问题,因为MHA最初是为较早版本的MySQL设计的。 常见的导致该错误的原因包括: 1. MHA Manager无法连接到任何MySQL节点(包括主库和从库)。 2. MySQL节点的状态异常(例如,主库宕机且从库也无法连接)。 3. MHA配置文件中关于节点连接的信息(如IP、端口、用户名、密码)不正确。 4. MySQL 8.0默认使用了新的身份验证插件(caching_sha2_password),而MHA可能还不支持,导致认证失败。 解决方案步骤: 1. 检查网络连接:确保MHA Manager可以ping通所有MySQL节点,并且MySQL的端口(默认3306)是开放的。 2. 检查MySQL服务状态:确保所有MySQL节点都在运行。 3. 检查MHA配置文件:确认配置文件(如app1.cnf)中的节点配置正确,特别是hostname、ip、port、user、password等。 4. 修改MySQL用户认证插件:MySQL 8.0默认使用caching_sha2_password,而MHA可能只支持mysql_native_password。因此,需要将用于MHA连接的用户(如mha用户)的认证插件改为mysql_native_password。 参考引用[2]和[3]中的操作,修改用户认证插件: 在MySQL中执行: ALTER USER 'mha'@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY 'mha'; FLUSH PRIVILEGES; 同样,确保复制用户(如repl)也使用mysql_native_password: ALTER USER 'repl'@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY '123'; FLUSH PRIVILEGES; 5. 测试连接:使用MHA Manager节点上的mysql客户端尝试用相同的用户名和密码连接到每个MySQL节点,确保连接成功。 6. 检查MHA Manager日志:通常位于/var/log/masterha/app1/manager.log(具体路径根据配置),查看更详细的错误信息。 如果以上步骤都正确,但仍然报错,可能需要检查MHA版本是否支持MySQL 8.0。目前,MHA的官方版本可能尚未完全支持MySQL 8.0,但社区可能有补丁。可以尝试使用一些第三方分支(如https://github.com/yoshinorim/mha4mysql-manager)来支持MySQL 8.0。 注意:在修改认证插件后,需要重启MySQL服务吗?实际上,执行ALTER USER后立即生效,不需要重启,但需要确保FLUSH PRIVILEGES。 最后,建议在测试环境中验证MHA的故障切换功能。</think>### MySQL 8.0 MHA 报错 "There is no alive server We can't do failover" 解决方案 #### 问题分析 该报错通常发生在 MHA 检测不到任何存活的 MySQL 节点时,主要原因包括: 1. **认证插件不兼容** MySQL 8.0 默认使用 `caching_sha2_password` 认证插件,而 MHA 仅支持 `mysql_native_password`[^1][^2]。 2. **网络连接问题** MHA Manager 无法通过 TCP/IP 连接到 MySQL 节点(防火墙/路由限制)。 3. **权限配置错误** MHA 用户权限不足或配置未生效。 4. **节点状态异常** 所有 MySQL 节点实际宕机或处于不可用状态。 --- #### 解决方案(逐步操作) ##### 步骤 1:修改用户认证插件(关键步骤) 在 **所有 MySQL 节点** 上执行以下 SQL 命令: ```sql -- 修改 mha 用户认证插件 ALTER USER 'mha'@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES; -- 修改复制用户认证插件(如 repl) ALTER USER 'repl'@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY 'repl_password'; FLUSH PRIVILEGES; ``` **说明**: - 将 `10.0.0.%` 替换为 MHA Manager 的实际 IP 段 - 密码需与 MHA 配置文件 `app1.cnf` 中的配置一致[^3] ##### 步骤 2:验证网络连通性 在 MHA Manager 节点执行: ```bash # 测试到每个 MySQL 节点的连接 nc -zv db01 3306 # 主库 nc -zv db02 3306 # 从库1 nc -zv db03 3306 # 从库2 ``` **修复建议**: - 若连接失败,检查防火墙规则: ```bash sudo iptables -L -n | grep 3306 ``` - 开放端口: ```bash sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT ``` ##### 步骤 3:检查 MHA 配置文件 确认 `app1.cnf` 配置正确: ```ini [server default] user=mha password=your_password # 需与步骤1设置的密码一致 ssh_user=root [server1] hostname=db01 # 确保主机名可解析 candidate_master=1 [server2] hostname=db02 no_master=1 ``` ##### 步骤 4:检查节点状态 1. 手动验证 MySQL 节点状态: ```sql SHOW SLAVE STATUS\G -- 确认复制正常 SELECT @@read_only; -- 从库应为1 ``` 2. 在 MHA Manager 运行检测: ```bash masterha_check_repl --conf=/etc/mha/app1.cnf ``` **预期输出**:`MySQL Replication Health is OK.` --- #### 其他注意事项 1. **MHA 版本兼容性** 使用支持 MySQL 8.0 的 MHA 分支(如 [mha4mysql-manager](https://github.com/yoshinorim/mha4mysql-manager))。 2. **日志分析** 检查 MHA 日志定位具体问题: ```bash tail -f /var/log/masterha/app1/manager.log ``` 3. **权限验证** 在 MHA Manager 测试 MySQL 登录: ```bash mysql -u mha -h db01 -p -e "SHOW DATABASES;" ``` --- #### 预防措施 - 在部署 MHA 前统一修改认证插件: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; ``` - 使用 MHA 连接检查工具定期验证: ```bash masterha_check_status --conf=/etc/mha/app1.cnf ``` 通过以上步骤,可解决 90% 以上的 `There is no alive server` 报错问题。若问题仍存在,请提供 MHA 日志中的具体错误行进一步分析[^1][^3]。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值