手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表分类:DataBase

DataGrip和navicat中的data transfer

 突然发现自己还有一个database的分类,想想以前还在为了折腾怎么弄mysql更好,后面被各种数据库折腾(小型公司,不涉及大数据库,都是常规的,象pg/sqlite/sqlserver/mongodb/redis)。

 
平时用的最多的还是navicat,不过我现在还在用11,用它的原因很的很奇怪也很尴尬
1、他的 cmd+ . , cmd+shift+.可以用来关库关表 (12开始,居然没有这个快捷键了)
2、12开始密码存到keychain里了。导致我其实没有办法迁移数据库(确实很尴尬,很多密码居然都忘光了。。。。但还能连接)
3、UI的变化,也让我有点不太习惯。
所以只能一直用着11了,11也有不少小问题,比如从新版的macos 11起,在data管理界面,对数据操作的Icon全部不见了,我都是凭记忆在猜在操作。
所幸+,-等还在因定的位置,刷新可以cmd+R,所以我其实已经忍了好多年了。
之所以还在一直使用,就是因为navicat的data transfer实在太方便了。对于一些小的表,要复制到本地,或者复制到线上。。直接在表名上data transfer就可以导入到指定的target库里了。
 
当datagrip出来后,我本来想的是可以迁移了,至少他是免费的,而且也支持市面上几乎所有的数据库,然而就是我说的data transfer这个功能阻挡了我,即使我安装了datagrip,也很少用它,直接我无意中搜索到了这个:Copy | DataGrip (jetbrains.com),原来它不叫data transfer,而是叫:copy to ....,将指定的表copy 到target里。
简单的在本地用sqlite进行了测试,操作完美,但这毕竟只是同库操作,于是我又试了一下,copy table from sqlite to mysql,完美~~
 
看来以后可以切换着使用datagrip了~(缺点也有,打开的时候数据过多的时候,没有navicat快。想想也是,毕竟是基于java的。而人家是纯C写的(也可能objc) )
 
结论:是的,你真的可以开始尝试DataGrip了
 
 
---EOF---
刚发现,DataGrip居然是收费的。不过我反正都买了全家桶了,所以也可以自豪的说用正版了,要知道原来用navicat premium可是擦边球的,You Know~~

记录一次数据库无法访问的处理

 很突然,线上有一台服务器,突然报表不存在。所有的项目只要涉及到数据库的,都直接报表不存在。SSH到服务器上一看,进程也活着,目录下的文件也存在着,怎么就表不存在了呢?

当时也没有注意,觉得可能是程序出错了。就restart了一下数据库,结果,这回出大事了,数据库无法启动。再启动,仍然是这个问题。连忙看了一下日志,发现报错原因居然是磁盘满了。这,不科学啊。df -h 看一下,果然,系统盘自带的20G,剩余空间为0。

怎么办?先清一下apt-cache,发现多出100多M的空间,尝试启动了一下,果然数据库启动了。再检查到底是谁占了?直接du -sh  /var/log。居然只有200M,那是怎么回事呢?

继续 找,du -sh 一个目录一个目录的看。发现居然是mail目录写满了,一个mail文件。17G,用tail -n 1000 看了一下。文件居然都来自crontab ,再打开crontab -l,才发现,原来是有一个5年前的svn的勾子在运行。这个勾子,每5秒一次,就这样辛苦的运行了5年,终于通过邮件,硬生生的将磁盘写满了。

知道问题所在就简单了。关闭crontab (因为已经不用了)。同时清空邮件文件。再df -h,发现多出17G空间。好嗨森

 

mysql快速复制一个库

 习惯了用navicat之后。居然不会用命令行了。。。

记录一下算是备份
1、进入mysql命令行,创建一个新库,create database xxxx; //先看一下旧库的格式。用show create database `库名`,主要是看一下旧数据库的编码:
     CREATE DATABASE `xxx` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;
 
2、mysqldump 旧库 -u root -p123456 --add-drop-table | mysql 新库 -u root -p123456
     假设密码是123456
 
3、grant 权限给指定的用户
    grant all privileges on xxx.* to 'user'@'localhost' identified by 'password',很方便的指定。记得localhost那个地方尽量不要留空。留空默认代码的是%
 
4、真正要用的时候,其实查一查都OK。。

将原数据库从latin1改为utf8

 原来的数据库是N年前的,默认字符集是latin1,但是有一些旧代码中,连接参数写的是UTF8,于是就这样。。。DB字符集为latin1,连接UTF8,存到数据库也是UTF8,wj但查看的时候显示是???

为了标准统一,于是使用mysqldump -uxx -p database a b c d e > dump.sql,将部分表先导出来

然后修改导出sql的charset=latin1;改为charset=utf8;

 

至此,操作完成。简单粗暴 

 

-------EOF--

deeka说,如果有200G呢。目前我是停机处理的。因为要处理的数据也不是很多。如果不是因为升级换库的时候出现不能访问我也不会这么做。

但好象也没有特别好的方案。因为直接alter的时候也是各种不正常。才dump的

Error connecting remote MySQL server [ERROR 1042 (HY000): Can't get hostname for your address]

设置了远程数据库允许IP连接,也设置了bind ip为0.0.0.0 ,但有时候能连,有时候不能连接,而且还设置了是IP连接,报标题所在的错误,即 [ERROR 1042 (HY000): Can't get hostname for your address]。

开始就在想,是不是skip-name-resolve的问题,但因为我不是用host连接的,也不是内部的域名解析的问题。所以开始没注意,但google了之后,还是决定加了skipnameresolve

http://serverfault.com/questions/174242/error-connecting-remote-mysql-server-error-1042-hy000-cant-get-hostname-for
  1. ave MySQL 5.5 Server setup on a windows machine. I am able to connect to the server from console / app running on the same machine but not from a remote machine. While connecting using the command  
  2.   
  3. mysql -h xx.xx.xx.xx --port=3306 -u root -p  
  4. I get error as:  
  5.   
  6. ERROR 1042 (HY000): Can't get hostname for your address  
  7. Have tried putting entry of client ip in server's etc\hosts file as  
  8.   
  9. <client-ip>  <client-hostname>  
所有的回答都指向了skip-name-resolve
XML/HTML代码
  1. I believe this is to do with the fact that MySQL tries to establish the DNS name associated with your IP address on connect. See here for more information at the MySQL site.  
  2.   
  3. You have two options:  
  4.   
  5. 1) Fix the connecting machine's reverse DNS. Since you've already added the machine to the hosts file, this might be unnecessary. You should also issue a FLUSH HOSTS statement on the MySQL server. See the same link above for more information about this.  
  6.   
  7. 2) Run MySQL with the '--skip-name-resolve' option. However, if you do this, you won't be able to use DNS names in GRANT statements. Instead you'll be restricted to using IP addresses.  
  8.   
  9. 2.1) or put in my.ini :  
  10.   
  11. [mysqld]  
  12. skip-name-resolve  
  13. I'd recommend (1) if you can.  
  14.   
  15. Hope this helps.  
然后也确实解决了这个问题。记录一下
 
 

 
 

Tags: mysql

Records:16012345678910»