延续 https://brucewayne2099.github.io/2021/02/19/Mysql的强制类型转换导致全表扫描/ 一文的表,再创建一个表:
1
2
3
4
5CREATE TABLE IF NOT EXISTS `type`(
`tid` INT UNSIGNED AUTO_INCREMENT,
`typename` VARCHAR(100) NOT NULL,
PRIMARY KEY ( `tid` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
再加上一些数据:INSERT INTO type (typename) VALUES ("good"), ("Bad"), ("Excellent");
。此时里面数据如下:
使用一下SELECT article.aid,article.title,user.username,type.typename FROM article INNER JOIN user ON article.uid=user.uid INNER JOIN type ON article.tid=type.tid;
,效果如图:
那再试试outer join
,发现有报错:
明明说inner join A和B
获得的是A和B的交集(intersect),outer join A和B
获得的是A和B的并集(union),为啥会报错?
答案是免费版的mysql不支持,只有企业版才支持。那既然普通的MySQL看来是不支持full outer join
的了,可以这么处理:
1
2
3select article.aid,article.title,article.content,user.username from `article` left join `user` on article.uid=user.uid
union
select article.aid,article.title,article.content,user.username from `article` right join `user` on article.tid=user.uid;
效果如图:
Mysql8远程链接的问题
登进MySQL在命令行如下操作:
1
2
3
4mysql>use mysql
mysql>update user set host='%' where user ='root'; #'%'表示允许外部访问
mysql>FLUSH PRIVILEGES; #将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里,不重启MySQL直接生效
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
然后Navicat就可以通过账户密码访问了。
如果Navicat爆出mysql_native_password
这个错误,那就是要改一下root加密方式从caching_sha2_password
修改成mysql_native_password
:
1
update user set plugin='mysql_native_password' where user='root';
这样再去Navicat试试吧。
mysql启动失败的排查方法
机器原来用的是mysql8,但是发现还是用回mysql 5.7比较好,于是就卸载了mysql 8,安装了5.7。但是启动的时候,发现失败,使用mysql --help | grep my.cnf
找到my.cnf的地址,然后在my.cnf里找log-error,发现对应的mysql错误日志路径,如图:
打开日志后发现启动失败的原因是这样一句话:[ERROR] [FATAL] InnoDB: Table flags are 0 in the data dictionary but the flags in file ./ibdata1 are 0x4800!
。
找到问题了,InnoDB的问题。原来安装的是mysql8.0版本,比现在的5.7版本要高,但在高版本数据库时创建的一些数据库数据都还在,使用的是高版本的InnoDB引擎,而低版本的数据库服务还是指向了这些数据,但是一些版本的数据格式不同,这个时候,我们只要把高版本的数据删掉就可以了,删掉后重新启动mysql就可以了。
删除高版本数据库时创建的数据,不是仅仅删除创建的一些数据库,而是把整个mysql的数据目录全部删除。语句是:sudo rm -rf /var/lib/mysql/*
,然后systemctl start mysqld
和systemctl enable mysqld
就OK了。
Royal tsx启动失败和自动断开的问题
前几天过年没啥事,就手动把macos升级成了Big Sur
,结果发现终端连接工具royal tsx
就无法启动了。众所周知,Xshell是没有macos版的,很多人也直接用macos的终端来远程连接服务器,但是我还是喜欢有一个终端管理工具,当时就选择了royal tax
,这更新了底层系统,应用启动失败,我就懵逼了。查了一圈,发现https://www.royalapps.com/blog/royal-tsx-and-macos-11-big-sur 里有说明,需要下载符合Big Sur
的royal tax才可以。我下载的是5.0.0.7,果然,更新之后,问题解决了。
补充一下,如果用Royal Tsx
做文件传输,那么就直接用他的file Transfer即可,方式用的是SFTP,22端口的那个,不要用FTP。
Royal rsx默认闲置一会就自动断开,这点很讨厌。可以这么改:在对应的回话Connections
点击右键,选择Properties
,左侧菜单栏选择Advanced
,然后点击Session
,如图配置即可:
这里取消了“当session结束不自动关闭窗口”,同时设置闲置的时候发送一个ascii码来拒绝断开操作。
参考资料
https://www.cnblogs.com/lyhabc/p/3378753.html
https://blog.csdn.net/h996666/article/details/80921913
https://blog.csdn.net/qq_35456045/article/details/105554783
https://juejin.cn/post/6844904069786517517#heading-1 (centos8安装mysql5.7看这个就行)