2017年3月21日星期二

mysql

配置root密码

mysqladmin -u root -p 'somepasswd'

登陆mysql

mysql -h xxx.xxx.xxx.xxx -u root -p

删除mysql-bin.000xxx日志文件的方法

注释掉my.cnf里面的

 #log-bin=mysql-bin   #binlog_format=mixed  

重启mysql

删除mysql-bin.000xxx文件

远程连接 出现 2003 错误

http://blog.icodeu.com/?p=170 的一个解决方案:

检查 /etc/mysql/my.cnf 中的 bind_address=127.0.0.1 只监听本地的请求,bind_address=0.0.0.0 监听任意来源的请求

允许远程连接数据库

允许从myip用username:password远程连接到当前数据库dbname:

grant all on dbname.* to 'username'@'myip' identified by 'password'

图形化管理工具

mysql整天用命令行搞也挺烦的,图形化管理工具对懒人还是有市场的。。。

navicat 很好用,不过是试用30天

dbeaver 也不错,需要安装java

求时间间隔函数

见: 日期和时间函数

SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');

case检查条件

select cola, colb, (case when colc='abc' then 1 else 0 end) as test from sometable

Perl 连 MySQL 的问题

Perl连MySQL时还是用DBI比较保险

安装DBI及DBD::mysql,perldoc DBI看具体用法

用Net::MySQL连的话可能有编码问题,两张表的中文编码不同,联查的时候搞不定

主从同步

参考:

只导出表结构 : mysqldump --opt -d --skip-lock-tables testdb > testdb.sql

可以只导出表结构,配好主从,master不停机,slave慢慢自动同步(注意:有些一直没变化的数据slave会缺,可以后续再备份)

修改列的取值类型

alter table t1 alter column testcol varchar(200) default '';

用Perl的DBI将本地文件导入远程mysql数据库

需要设置mysql_local_infile=1来远程load file

将本机上的$local_file内容导入远程$host上的mysql数据库的$table表中:

#!/usr/bin/perl  use DBI;    my ($db, $host, $port, $usr, $passwd, $table) = ...;  my $local_file="...";    my @cols=('col_a','col_b','col_c');  my $join_cols = join(", ",@cols);     my $dsn = "DBI:mysql:database=$db;host=$host;port=$port;mysql_local_infile=1";  my $dbh = DBI->connect($dsn, $usr, $passwd,  { RaiseError => 1, AutoCommit => 0 }  );     $dbh->do(qq{  load data local infile '$local_file' into table $table  fields terminated by ','  ($join_cols)  });

没有评论:

发表评论