MySQL 安装/常见错误

一、Linux 安装

  可参考:https://blog.csdn.net/qq_41604383/article/details/103599573

 

  1. 命令

    A. 启动mysql:service mysqld start;

    B. 停止mysql:service mysqld stop;

    C. 重启mysql:service mysqld restart;

  2. 知识点

    A. mysql是一个命令行程序,mysqld是一个服务,Linux系统里的一般服务都是以d结尾的

    B. 直接运行mysqld程序来启动MySQL服务的方法很少见,而mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。

 

二. 问题集绵

  问题一:本地代码和navicat连不上阿里云服务器mysql

  原因:A. 服务器的防火墙没有开放3306端口;

     B. 阿里云没有开放3306端口。

  解决:A. 针对navicat可以通过ssh连接mysql;

     B. 针对本地开发必须开放服务器防火墙和阿里云3306端口。

  问题二:代码执行SQL数据无法插入

  原因:该SQL数据带有分号,而SQL执行命令间默认就是分号(;)分隔符;

  解决:将分号默认为命令间分隔符改为自定义分隔符如%%;

  可参考:使用MyBatis的ScriptRunner执行SQL文件

   问题三:修改mysql.sock(数据库启动后生成的)默认路径导致登录本地数据库异常

    原因:使用rpm安装,mysql客户端默认是去读取/var/lib/mysql/mysql.sock;

    解决:在/etc/my.cnf文件中client位置添加新的socket位置,然后重启服务即可,或者命令连接添加-h127.0.0.1 -p3306

1
2
[client]
socket=/data/mysql/mysql.sock

  问题四:MySQL因服务器断电后无法重启

    原因:InnoDB文件损坏

    解决:步骤一:修改my.cnf配置,添加innodb_force_recovery=1,innodb_force_recovery值范围是1至6,然后重启MySQL,变换innodb_force_recovery值直至重启成功;

        innodb_force_recovery=1,忽略检查到的corrupt页;

        innodb_force_recovery=2,阻止主线程的运行,比如主线程需要执行full purge操作,会导致crash;

        innodb_force_recovery=3,不执行事务回滚操作;

        innodb_force_recovery=4,不执行插入缓冲的合并操作;

        innodb_force_recovery=5,不查看redo log,InnoDB引擎会将未提交的事务视为已提交;

        innodb_force_recovery=6,不执行前滚的操作。

        innodb_force_recovery不同值设置,会不同程度损坏数据库文件,生产环境需谨慎使用,确保对这个属性了解清楚

        步骤二:数据库数据导出,mysqldump -h127.0.0.1 -P3306 -uroot -p123456 rhxy-prod > rhxy-prod.sql,数据一定要备份成功,否则后续动作无法找回;

        步骤三:删除文件,先备份ib_logfile0、ib_logfile1、ibdata1三个文件,然后再删除;

        步骤四:修改my.cnf配置,将innodb_force_recovery指改为0,或者注释掉,或者删除掉,然后再重启MySQL;

  ·     步骤五:导入备份的数据,mysql -h127.0.0.1 -P3306 -uroot -p123456 rhxy-prod < rhxy-prod.sql,导入过程中提示Tablespace exists问题,可以删除ibd文件再试。

 

三、常见错误

  错误一:

    A. 现象:版本为5.7.20的MySQL,使用GROUP BY field字段排序报错;

    B. 原因:MySQL 5.7.5及以上功能依赖检测功能,如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们;

        SQL查询语句:select @@global.sql_mode

    C. 解决办法:在/etc/my.cnf中增加sql_mode,去掉ONLY_FULL_GROUP_BY值即可(sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION);

 

可参考:my.cnf文件参数详解

    http://www.linuxe.cn/post-631.html

    https://blog.csdn.net/yabingshi_tech/article/details/108981225

posted @   如幻行云  阅读(164)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示