解决方案参考: https://forum.xda-developers.com/pixel-c/help/device-resource-busy-t3449240

正常将只读的/system分区变成可读写是用下面这个命令:

mount -o remount,rw /system

一般情况下,/system就变成可读写了。但是在某些设备上,会提示Device or resource busy错误。这个时候只需要将-o的两个参数顺序调换一下即可,也就是这样:

mount -o rw,remount /system

下载与安装

首先在docker的注册表中搜索mysql,点击下载, 然后选择版本。我这里选择的是8.0.16的版本

选这个版本的进行下载

下载完成之后,点击启动。这里要注意,配置一个MYSQL_ROOT_PASSWORD的环境变量,否则启动会失败。

记得要设置MYSQL_ROOT_PASSWORD变量(新窗口看大图)

完全启动完成需要等待一段时间,一般3分钟左右,具体可以观察容器详情中的进程一栏,如果mysqld –initialize-insecure进程没有了,取而代之的是mysqld,则表示启动完成。

正在初始化
初始化完成

现在mysql虽然已经启动,但接下来还是要进行配置的。切换到容器详情的终端机一栏,点击新增按钮来创建一个bash,然后就可以像操作linux的shell一样和docker内部进行交互。

设置远程访问

mysql> use mysql;
Reading table information for completion of table and column names                                                                                                   
You can turn off this feature to get a quicker startup with -A                                                                                                       
                                                                                                                                                                     
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+                                                                                                             
| host      | user             | plugin                |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
| %         | root             | caching_sha2_password |                                                                                                             
| localhost | mysql.infoschema | caching_sha2_password |                                                                                                             
| localhost | mysql.session    | caching_sha2_password |                                                                                                             
| localhost | mysql.sys        | caching_sha2_password |                                                                                                             
| localhost | root             | caching_sha2_password |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
5 rows in set (0.00 sec)

如果上面关于root的输出只有一个localhost的话,那么这个mysql只能进行本机登录;你需要做的是下面这样处理:(不要相信网上的什么with options,那个已经过时了,在mysql8.0.16中执行会报错)

mysql> CREATE USER 'root'@'%' IDENTIFIED BY '111111';//创建root账户,同时指定密码为111111
// mysql> ALTER USER 'root' IDENTIFIED BY 'password';//这行可以不要
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
mysql> flush privileges;

如果像我上面这样的输出,关于root的输出有一个% ,则代表已经可以进行远程登录了,不需要上述操作。

修改默认的加密方式

mysql8中引入了新的加密方式 caching_sha2_password,而且被设置成了默认的加密方式,这就有可能导致客户端连接出现问题。据我所知,phpMyAdmin即使是4.9版本也不支持这种加密方式,虽然他们在GitHub上把这口锅漂亮的甩给了php。而php版本据说低于7.4的也是不支持的;Navicat Premium 12.0.29版本已经支持这种加密方式了,其他客户端未经测试。所以如果要使用phpMyAdmin等其他客户端的话,建议修改加密方式。

首先要确认,当前的加密方式是什么:

mysql> use mysql;
Reading table information for completion of table and column names                                                                                                   
You can turn off this feature to get a quicker startup with -A                                                                                                       
                                                                                                                                                                     
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+                                                                                                             
| host      | user             | plugin                |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
| %         | root             | caching_sha2_password |                                                                                                             
| localhost | mysql.infoschema | caching_sha2_password |                                                                                                             
| localhost | mysql.session    | caching_sha2_password |                                                                                                             
| localhost | mysql.sys        | caching_sha2_password |                                                                                                             
| localhost | root             | caching_sha2_password |                                                                                                             
+-----------+------------------+-----------------------+                                                                                                             
5 rows in set (0.00 sec)

关于root的两行显示的plugin是caching_sha2_password,我们要将它改成mysql_native_password

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '111111'; 
Query OK, 0 rows affected (0.25 sec)

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '111111'; 
Query OK, 0 rows affected (0.22 sec)
//这里的111111是指密码,可以自定义

光这样改过之后还不能用,这个就是很坑爹的地方了。需要另外再给它弄个配置文件,就像这样:

[mysqld]
default-authentication-plugin=mysql_native_password

把它保存成一个文件,然后上传到群晖上(建议另外弄个文件夹保存),把这个文件所在目录挂载到/etc/mysql/conf.d目录上,再启动mysql就能彻底解决问题

就像这样

演示环境:Windows 10 主机 + Ubuntu 18.04 客户机 + VMware Workstation Pro 15,虚拟机磁盘设置在一块256G的SSD上

目标:虚拟机磁盘占用了Windows 10主机的SSD大量空间,现在要压缩这块vmdk来减少磁盘占用

这块vmdk的设置如下,并没有预分配磁盘空间:

虚拟磁盘的设定

看,它占了95GB的SSD空间!简直不可思议!实际上:

实际上这个盘只用了9.5GB

实际上他喵的才仅仅用了9.5GB啊!那么问题来了,该如何才能把那么大的磁盘空间压缩压缩?

接下来就是痛苦的尝试各种 解决方案:

  • 1. 很自然的就想到直接去点击设置里面的那个压缩按钮,然后1秒钟,提示压缩完成。满心欢喜原来压缩这么快,然后看了一下windows资源管理器中的文件大小就知道,根本就没给你压缩
  • 2. dd命令填充0,然后删除文件,然后关闭客户机,然后再去点击那个压缩按钮。过程我就不罗嗦了,dd的过程花了好几分钟,结果还然是1秒钟提示压缩完成。
  • 3. 首先先做个defrag。 sudo e4defrag / 执行完之后再重复2中的步骤,结果依旧是1秒钟。 fuck you~
  • 4. 在3的步骤中执行到删除文件后,再加上一个压缩命令 sudo vmware-toolbox-cmd disk shrinkonly 。结果是不支持?
emm…..?

为什么他喵的不支持???看了一下这个错误的搜索结果,大致分为两种情况:有磁盘快照或者是预分配磁盘。然而我并没有使用任何磁盘快照,也不可能去预分配磁盘。

  • 5. 既然上面这些办法都不好使,那么就用vmware宿主机中的vmware-vdiskmanager吧!执行结果是:Failed to shrink the disk ‘D:\xxx.vmdk’ : An error occurred while writing a file; the disk is full. Data has not been saved. Free some disk space and try again (0x8).

disk is full。。。嗯,什么意思?是说我宿主机的磁盘空间不够了吗?

于是我默默的查看了一下D盘的可用空间,提示为79GB。难道说我得有150GB剩余空间才能成功压缩吗?

抱着试试看的想法,把SSD盘中的乱七八糟的文件搬到其他盘中,现在剩余空间是135GB,先来试试看好不好用。

剩余135GB,试一下看看

首先是关闭客户机 ,以防万一,我把vmware也给X了,重新执行命令。。。

开始压缩了。。。

喔激动一下,它开始shrink了,看来确实是宿主机磁盘空间不够了,所以shrink不了?

压缩完成之后,这个vmdk的大小变成了:

成功压缩了

吃惊,大小居然能压缩到8.83GB这么小!


总结:通过上述实践过程,发现一个要压缩Linux格式的vmdk文件大小的前提条件,而这个前提条件却是各种高票回答都没有提及的:存放vmdk文件的磁盘一定要有足够大的可用空间才能压缩,否则就会1秒钟或者压缩失败。由于磁盘已经被我压缩掉了,而且还是那么多操作都做过来的,所以有些疑问:是否真的需要这么多步骤?是否只要dd后删除dd出来的文件,然后直接点击vmware设置中的压缩按钮就可以了?这些就留待日后有时间吃饱了撑的慢慢测试了

问题现象1:可以看到出错对话框上有类似PUR-Authentication failure提示,下一步可能会让你登录Microsoft账户,等你满心欢喜输入好账号密码后,提示你个错误界面

问题现象2:无法登录microsoft账户

解决思路:不要着急按照百度上的提示来,什么新建用户,什么重置电脑,虽然能够达到所需的效果,但是:重置电脑后那么多软件一个个再重新安装重新配置也得花上好半天功夫;新建个用户看上去省事,但是这是不是代表只能用新建的用户去下app?如果真的是这样,那就跟重置电脑没太大区别,还不如重置电脑了。。。

于是乎,在Google上有一个用户也发现了类似问题: https://social.technet.microsoft.com/Forums/en-US/7e3c7ee9-0ac5-4357-8247-6c439b53d415/purauthentication-failure-when-installing-an-app-from-microsoft-store-from-hybrid-azure-ad-joined?forum=win10itprogeneral

按照他的说法,只要启动了Microsoft Account Sign-in Assistant服务,就可以登录了

回过头看了一下系统的服务,确确实实,这个服务被禁用了。。。然后就是手动恢复这个服务,然后后面就相当顺利的登录账号,下载app

问题解决,撒花

最近从Eclipse转到Android Studio后,发现了不少的问题,其中一个让人头疼的问题是不能用AS来Debug,这一点是无法让我接受的。趁着周末有空就研究一下这个问题。

调试用的手机是小米3电信/联通版,AS版本是1.3.2 build 141.2178183,具体的问题如下:

QQ20150927213926

AS中点击Debug选择设备后就卡在了这里:Waiting for process:

相应的,手机上则卡在了这个界面:

Screenshot_com.example.luci.myapplication_2015-09-27-21-40-39

只是偶尔一两次可以进行Debug,如果点击Run则一点问题都没有。Oh no!

起初怀疑是手机问题,但是很快就被我否定了,因为之前用Eclipse调试的时候没出现过这种问题,而且手机插在别的有AS的电脑上也没出现这种问题。

于是怀疑是电脑问题,为此我特意准备了一个虚拟机,安装同样的操作系统,用同样的软件搭建同样的编程环境,却发现在虚拟机中一切正常,能正常调试!看来是电脑的问题了

然后开始怀疑驱动,由于之前用的是刷机精灵的驱动,于是我把驱动删了,换上了国外的某个软件下载的驱动,尝试后发现不行。删除驱动后我下载了我最反感的360,让这货给我装驱动。结果这个360驱动居然也不行。。。

百思不得其解后,百度找了下,找到一篇帖子提到了这个问题。按照帖子里讲的,禁用MDB设备,结果无效。。。到此我心想,换台手机试试呢?于是我找出了N年前的一台2.3.5系统的手机插上去后居然能正常调试,非常好使,至此我开始迷糊了。。。

在Goodle上找了一会儿,就找到一个StackOverflow上说项目的设置问题,把android:debug去掉即可。但是我在我的项目中压根就没看见有过这个属性,所以排除之。

结束语:折腾了一天结果还是没搞明白到底是什么原因,我也不想上论坛发帖子去问,因为这种帖子一发就铁定石沉大海了,就算有人回复那也是以灌水回复捞积分的居多。说句实话,百度知道上面真正懂技术的人是少之又少,大部分问题的回答都是牛头不对马嘴,完全不看问题问的是什么就在那边乱回答,参考意义实在是不大