分类目录归档:MYSQL

windows创建软连接附加mysql数据库

mysql数据库MyISAM引擎数据库表有三个文件,分别是*.frm、*.MYD、*.MYI,只要备份这三个文件也就完全备份了数据库,非常方便,有时候会遇到临时读取备份数据库的情况,全部拷贝到开发环境未免太过繁琐,其实合理利用windows系统的软连接即可解决问题,即把移动硬盘(或其他目录)的数据库文件夹软连接到mysql的数据库文件夹即可,命令如下:
mklink /J linkname dstdir
例如:mklink /J mydata D:\mydata\
重启mysql服务后,即可在数据库里正常使用D:\mydata\目录下的数据库了。

一次千万级数据迁移遇到的问题及解决方法

这次是4千万记录从oracle迁移到mysql数据库,操作系统均为windows,oracle端使用PL/SQL Developer操作:
1、select出所有数据后,使用PL/SQL Developer自带导出工具导出sql文件,文件巨大,然后mysql端命令行下登录后使用source命令直接导入,那叫一个慢,而且plsql导出的sql文件是每条记录一行insert into 所以导致文件巨大,而且效率低下,如果使用ultraedit编辑替换掉insert into语句也要很长时间,所以这个方法放弃,想到了使用mysql的load data方法; 继续阅读

Linux(ubuntu)开机启动脚本遇到的坑

使用python制作了一个脚本,想法是每6小时重新执行一次,而脚本是重复循环的也就是6小时里它是不会自动结束运行,所以单纯使用crontab定制定时任务不能直接达到目的,需要使用脚本检查PID,太麻烦!于是想到是使用crontab定制每6小时重启一次主机,然后脚本放在/etc/rc.local里达到开机启动的目的,坑也在这里挖好了,其实还是自己技术不精导致的!!!
1、crontab脚本是在root下编辑的,如下:

0 */6 * * * reboot

这里是第一个坑,到时间主机就是不重启?!原来reboot需要root权限所以脚本要写成如下形式,改完立即好用:

0 */6 * * * sudo reboot

2、rc.local中脚本是这样写的:

/usr/bin/python3 /root/dl.py

这里是第二大坑,问题不在语法,而是dl.py文件没有可执行权限!使用命令chmod 111 dl.py解决
第三大坑是脚本执行了,却提示mysql错误没有conn对象,原来是脚本启动时mysql还没有准备好所以连接失败解决方法很多,异常判断等待几秒重连mysql数据库,我索性脚本运行开始先等10s后再连接数据库,问题解决。

mysql实现计算两点(经纬度)间的距离

LBS应用中常常需要计算两点之间的距离,以实现查看某点附近的地点、人、事、物,虽然mysql支持空间查询,但对于一些规模较小的应用还是用简单的处理办法比较快捷,这个方法改自一个js脚本,原脚本是:

var EARTH_RADIUS = 6378137.0; //单位米
var PI = Math.PI;
function getRad(d){
return d*PI/180.0;
}
function getGreatCircleDistance(lat1,lng1,lat2,lng2){
var radLat1 = getRad(lat1);
var radLat2 = getRad(lat2);
var a = radLat1 - radLat2;
var b = getRad(lng1) - getRad(lng2);
var s = 2*Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) + Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
s = s*EARTH_RADIUS;
s = Math.round(s*10000)/10000.0;
return s;
}
继续阅读

mysql 字段别名不能用于where子句的解决方法

mysql 字段别名不能用于where子句,会报”ERROR 1054 (42S22): Unknown column ‘xxxxxx’ in ‘where clause’
“错误,这个很多人都有遇到,却不知道是为什么,搜索了很多答案都觉得不靠谱。倒是找到了一个比较靠谱的解决方法:
“select name as alias from table where alias=’xxxx’;”这样的错误语句改为”select name as alias from table having(alias=’xxxx’);”即可解决问题。

Mysql 使用Insert into select where not exists语句避免插入重复记录

往生产环境更新数据时,往往会有一些重复的记录存在,为了避免插入重复记录,我常常使用的语句是“insert into select where not exists”,一般是先把需要更新的数据导入tmp临时数据库,然后再插入线上数据库,这样可以最大程度避免影响业务系统的正常运转,并顺利使用以上语句。
这里举例的线上数据表是oming,临时数据表是oming_tmp(创建该表时使用语句“create table oming_tmp like oming;”)
字段有:id(自增),addr,lng,lat,time(update时自动更新时间)
1.多条记录导入:
insert into oming(addr,lng,lat) select addr,lng,lat from oming_tmp where not exists(select * from oming where oming.lng=oming_tmp.lng and oming.lat=oming_tmp.lat);
通过lng,lat字段验证是否重复。
2.单条记录导入:
insert into oming(addr,lng,lat) select ‘辽宁省沈阳市青年大街华润中心’,’123.441919′,’41.7809′ from oming_tmp where not exists(select * from oming where oming.lng=’123.441919′ and oming.lat=’41.7809′);

mysql有索引情况下的数据快速导入方法

mysql有索引情况下的数据快速导入方法有两种情况:
一、表类型为MyISAM:
首先关闭索引:ALTER TABLE tblname DISABLE KEYS;
然后导入数据
最后重新打开索引即可,同时自动刷新索引记录:ALTER TABLE tblname ENABLE KEYS;
二、表类型为InnoDB:
首先关闭唯一性校验:SET UNIQUE_CHECKS=0
关闭自动提交:SET UNIQUE_CHECKS=0
导入数据后重新打开自动提交:SET UNIQUE_CHECKS=1

Kali linux的mysql无法远程访问问题的解决

Kali linux各种用一向好用,可是今天在测试一个应用时用到在kali linux中安装mysql远程访问,却发生了意想不到的问题,无法访问,提示mysql.connector.errors.InterfaceError: 2003: Can’t connect to MySQL server on ‘192.168.31.166:3306’ (10061 由于目标计算 机积极拒绝,无法连接。)
这个问题真的很棘手,这种情况无非mysql服务没开,防火墙阻止等,可这两种情况完全排除了就是找不到任何问题,执行netstat -ntlp命令查看端口占用情况,发现以下情况感觉不太对:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 3706/mysqld
原来是3306端口监听在回环地址127.0.0.1,也就是说只能在主机本地访问,不能远程访问,于是找到配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
有一处疑似问题源的设置项:
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
大致意思是说仅仅监听本地地址,会更安全云云。。。
果断将bind-address注释掉,然后service msyql restart问题故障排除。

MySQL-connector-python的安装和使用

很多人用了Python开发的MySQL-python后发现还是更喜欢MySQL自家的风格,MySQL-connector-python就是MySQL自家开发的python模块,直接到MySQL官网下载对应的系统版本即可安装使用,下载地址是:
http://dev.mysql.com/downloads/connector/python/
对应的有windows安装包和linux、MacX各安装包或源码,我用的linux下载的是这个(点我下载
在linux命令提示符下输入 :wget http://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.3.zip
下载完成后:
unzip mysql-connector-python-2.1.3.zip
cd mysql-connector-python-2.1.3
进入到文件目录后安装:
sudo python setup.py install
进入到安装,10秒左右完成,这样就可以在python程序里正常使用”import mysql.connector as mysql”导入MySQL的connector模块了,使用也很简单。
下面的代码是一个简单查询一个数据表里数据的实例: 继续阅读

php5提示PHP Fatal error: Call to undefined function mysql_connect() in…的解决

Debian搭建的apache2+php5平台没有安装mysql数据库,今天弄个小应用要连接远程的mysql数据库,提示PHP Fatal error: Call to undefined function mysql_connect() in…这个错误,一下子懵了,没遇到过这样的问题啊,哎呀我去弄了老半天才想起来这茬事儿,没有安装mysql也没有安装php对mysql的支持,怎么可能好用呢,在不想安装mysql的情况下只需要一条命令:”sudo apt-get install php5-mysql” 搞定,mark一下,执行这条命令前别忘了先更新系统”sudo apt-get update”和”sudo apt-get upgrade”,至此问题解决,有时候也需要重启apache2的,执行命令 “sudo /ect/init.d/apache2 restart”。