在项目中,往往现在本地开发,把开发的版本上传到线上
对于数据库操作,一般有两种
第一种先备份出来再上传到线上数据库,这种比较麻烦,改一个字段也要上传
第二种直接用线上数据库,这就方便很多,但,不好的是,有时改动数据库,没来得及上传代码的时候,调用API接口的程序员可能会出错。
第三种,我是这样操作的,线下开发数据库直接上传到线上数据库
mysqldump db_* -uroot -p*** | mysql -h*** -P 3306 db_* -uroot -p
分类 mysql语言 下的文章
在项目中,往往现在本地开发,把开发的版本上传到线上
对于数据库操作,一般有两种
第一种先备份出来再上传到线上数据库,这种比较麻烦,改一个字段也要上传
第二种直接用线上数据库,这就方便很多,但,不好的是,有时改动数据库,没来得及上传代码的时候,调用API接口的程序员可能会出错。
第三种,我是这样操作的,线下开发数据库直接上传到线上数据库
mysqldump db_* -uroot -p*** | mysql -h*** -P 3306 db_* -uroot -p
做个笔记
分四步走
第一步,先放开实例安全组(在公网入方向 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
某库具体指向那个库 获取所有*
用户名 登录名
密码 登录密码
第四部 连接
数据库突然提示 Table is read only ,奇怪的是root用户也有这样的情况,这不科学呀!
那是咋个回事呢?
百度一下,解决办法为刷新
找到mysql安装目录lib下 mysqladmin -u root -p flush-tables
结果还是不可以
最后在大神的指导到,记清楚前面有备份过mysql下的data源文件
这样,去更新权限为可写,再来刷新就解决了
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