分类 mysql语言 下的文章

mysql 远程迁移,远程拷贝,远程复制


在项目中,往往现在本地开发,把开发的版本上传到线上

对于数据库操作,一般有两种
第一种先备份出来再上传到线上数据库,这种比较麻烦,改一个字段也要上传
第二种直接用线上数据库,这就方便很多,但,不好的是,有时改动数据库,没来得及上传代码的时候,调用API接口的程序员可能会出错。

第三种,我是这样操作的,线下开发数据库直接上传到线上数据库

mysqldump db_* -uroot -p***  | mysql -h*** -P 3306 db_* -uroot -p

远程mysql连接


做个笔记
分四步走
第一步,先放开实例安全组(在公网入方向 3306)
第二步,执行配置linux防火墙,这里一般会被忽略
代码为:

firewall-cmd --add-port=3306/tcp,或者firewall-cmd --permanent --zone=public --add-port=3306/tcp

提示success 则成功

第三步,开启某库权限

grant select, insert, update,delete on 某库.* to '用户名'@'%' identified by '密码';
flush privileges;

select, insert, update,delete 或 all privileges
某库具体指向那个库 获取所有*
用户名 登录名
密码 登录密码

第四部 连接


mysql中Table is read only的解决方法


数据库突然提示 Table is read only ,奇怪的是root用户也有这样的情况,这不科学呀!

那是咋个回事呢?

百度一下,解决办法为刷新
找到mysql安装目录lib下 mysqladmin -u root -p flush-tables
结果还是不可以

最后在大神的指导到,记清楚前面有备份过mysql下的data源文件
这样,去更新权限为可写,再来刷新就解决了

https://blog.csdn.net/jerrytomcat/article/details/81744860


MySQL查询、更新数据总是成功,存入值为0


MySQL查询、更新数据总是成功,存入值为0

你,你没有看错,就出现了这样的事:

用一个字符串去查询数据库,如果没有值就插入,如果有就更新
会发现该字符串确实有值,不是0
但是呢,存进去后就变成0了
查询也一样,查询总是有值,本来就没有改字符串值,就一个0的记录

遇到这样的事情,应该就是字段类型错了,把他做出整形了,而且默认值还是0


更新数据为同一张表查询结果


UPDATE users as u2 SET u2.`password` = 
SELECT u.password as pwd FROM homestead.users as u LEFT JOIN homestead.teachers as t on u.id = t.user_id WHERE t.staff_no = '2003001415' LIMIT 1)
WHERE u2.`loginname` = 'admin' 
LIMIT 1

这样会报错,是mysql本身不支持操作本身又把本身作为数据源(一眼看上去特别有真理,但是看看语句逻辑,在别的数据库是先查出数据,再更新数据,不矛盾呀,也许是mysql查询的时候有点懒,没把查询的结果做一个隔离,而是映射什么的)

解决办法:(包一层就解决了)

UPDATE users as u2 SET u2.`password` = 
    (SELECT pwd from (
        SELECT u.password as pwd FROM homestead.users as u LEFT JOIN homestead.teachers as t on u.id = t.user_id WHERE t.staff_no = '2003001415' LIMIT 1) as uu) 
WHERE u2.`loginname` = 'admin' LIMIT 1