Category Archives: Database

Mysql on Ubuntu

1. 安装
sudo apt-get install mysql-server
2. 设置远程访问
2.1.修改/etc/mysql/my.conf,修改bind-address,指定为本机实际IP地址 //这里需要提前改好,并重启mysql(感觉当IP是动态获取的时候会出现问题)
2.2.设置访问权限,类似:grant all on accessdb.* to accesser@’%’ identified by ‘password’;
3. msyql数据的具体位置
/var/lib/mysql
//可能需要root权限访问,sudo su后再进入;或者更改所有者chown。
4. 服务启动与关闭
sudo service mysql start/restart/stop
sudo /etc/init.d/mysql start/restart/stop
From Whu:
配置MySQL密码
1、在/etc/my.cnf配置段[mysqld]添加一行:skip-grant-tables,保存退出。
2、重启MySQL:/etc/init.d/mysql restart。
3、设置新的root密码:mysql –uroot –p,直接回车无需密码即可进入数据库;
update mysql.user set password=PASSWORD(”新密码”) where user=’root’。
4、删除/etc/my.cnf刚才添加的那一行,再次重启MySQL,密码修改完毕。
授权MySQL用户
1、grant all privileges on *.* to root@”%” identified by ’123321!a’;
错误修复
Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’
1、mysql -uroot -p -S /var/lib/mysql/mysql.sock
Can’t open and [...]

Postgresql使用(ubuntu系统)

1. 基本安( 转载:http://zhangwei.jiewenti.com/?p=10, 写得很清楚,赞一个)
第一步:在Ubuntu下安装Postgresql
sudo apt-get install postgresql-8.4 postgresql-client-8.4 postgresql-contrib-8.4
以上指令安装服务端和命令行客户端psql。
/usr/lib/postgresql/8.4/              存放postgresql相关的二进制文件
/usr/lib/postgresql/8.4/bin/        可执行文件
/usr/lib/postgresql/8.4/lib/         共享库文件
/etc/postgres/8.4/main/              存放postgresql配置文文件
/var/lib/postgresql/                    postgres用户的主文件夹
第二步:修改PostgreSQL数据库的默认用户postgres的密码
PostgreSQL 数据默认会创建一个postgres的帐号用户作为数据库的管理员,密码是随机的,所以:
首先,我们需要重置“postgres”用户的密码。
命令行如下:
sudo -u postgres psql(或者sudo su postgres -c psql)—>运行psql,psql是一个标准的postgressql客户端
postgres=# ALTER USER postgres WITH PASSWORD ‘postgres’;—>修改postgres的密码为postgres,不要忘记添加分号(回车后分号之前的sql语句才会立即执行)
postgres=# \q—>退出
修改了数据库中的密码之后,我们还需要修改linux下的用户 “postgres”的密码:设定成与数据库中postgres帐号相同的密码,即postgres。
sudo passwd -d postgres———>删除密码
sudo -u postgres passwd(或者 sudo su postgres -c passwd)—–>创建密码
然后输入跟之前一样的密码。
现在,我们就可以在数据库服务器上用 postgres帐号通过psql或者pgAdmin等等客户端操作数据库了(暂时还不能远程访问)。
第三步:修改PostgresSQL数据库配置实现远程访问
首先,我们需要编辑postgresql.conf:
sudo [...]

Python与mysql之间的中文乱码问题

使用python2.6和MySQLdb与mysql数据交互出现中文乱码。
现在通过统一字符编码,解决如下:
1、python使用的是unicode
对sql语句编码:sql.encode(’utf8′)
2、建立数据库时设定编码
create table NewTableName (…) default charset=utf8;
3、设定数据链接

conn = MySQLdb.connection(host=’localhost’,
user=’root’,
passwd=’password’,
db=’test’,
use_unicode=True,
charset=’utf8′)

use_unicode,charset两个属性对字符编码进行了设定。

Mysql数据备份

将mysql数据库数据导出和导入常用以下三个命令:
1、mysqldump , 将数据从数据库中导入文件,生成tbl_name.sql和tbl_name.txt两个文件,分别存放建表的sql语句和表中数据。
基本句法:
–tab=directory                               导出数据文件存放的目录
–lines-terminated-by=’\r\n’          控制行结束符,与上面参数结合使用
–quick                                             导出大数据表时,使用一次一行,提高效率
dbname -p
2、mysql, 执行包含SQL语句的文件生成数据库表 (批量处理.sql文件:cat *.sql | mysql ….)
基本句法:mysql -h hostname  dbname < sqlfile.sql -u username -p
3、mysqlimport ,将数据文件中的数据导入数据库
基本句法:mysqlimport -L -h hostname -u username –lines-terminated-by=’\r\n’ dbname data1.txt data2.txt … -p
–local, -L                                    Read input files locally from the client host.(数据文件在客户端)
导出和导入数据的一个关键问题是是否涉及到远程操作,有如多种组合:
1、将A机器上的数据库中的数据导出到B机器上,

在A机器上操作, ??
在B机器上操作,需要参数 -h;–tab参数设置的目录是A上的目录(奇怪),可以使用>操作导入到B机器上的某目录下的文件中

2、将A机器上的数据导入到B机器上的数据库中,

在A机器上操作,需要加参数-L, -h
在B机器上操作, ??

3、在客户端A上操作数据库服务器B(数据文件保存在B上)
导入导出数据的时候需要注意对文件和文件夹拥有访问和读写权限!! 错误参考
可以将即将导入的文件Table.txt放在 /tmp 目录下面
错误参考:
mysqldump: Got error: 1045: Access denied…
参考:http://www.ritto.cn/mysqldump-got-error-1045-access-denied/
快速备份(一般针对小数据量)
导出数据:
mysqldump databasename [...]

Mysql中一些注意点

1、text类型的字段不区分大小写
建表的时候增加限定 text collate utf8_bin
2、设置MySQL为可远程访问
使用nestat命令查看3306端口状态:
~# netstat -an | grep 3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN
从结果可以看出3306端口只是在IP 127.0.0.1上监听,拒绝了其他IP的访问。
打开/etc/mysql/my.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
把上面这一行注释掉或者把127.0.0.1换成合适的IP(在ubuntu下换成其他ip后,mysql启动不了,慎用)。
注释掉这一行之后,创建一个帐号,例如:
grant all privileges on database.tablename to ‘remote_username‘@’remote_hostname‘ identified by ‘password‘;
java编程中由sql 语句引发的错误:
Data truncation: Truncated incorrect DOUBLE value …
这个Exception在一种情况下是由于在update sql中set a=? and [...]

Mysql中的字符集和校对规则

一、基本概念:
1.什么叫做字符集
字符集就是一套符号和字符编码的集合。
2.什么叫做校对规则
校对规则就是在字符集内用于比较字符的一套规则。
二、MySQL按照下面的方式选择列字符集和校对规则:
·         如果指定了CHARACTER SET X和COLLATE Y,那么采用CHARACTER SET X和COLLATE Y。
·         如果指定了CHARACTER SET X而没有指定COLLATE Y,那么采用CHARACTER SET X和CHARACTER SET X的默认校对规则。
·         否则,采用表字符集和服务器校对规则。
三、四个级别的设置和比较:
服务器级别、数据库级别、数据表级别、字段级别。
基本设置格式:[DEFAULT CHARACTER SET charset_name] [COLLATE collation_name]
四:连接字符集和校对规则:
整个连接过程包括2个阶段,客户端发送请求,服务器端响应请求。其中涉及了3种连接过程中的字符集和校对规则:
1.当从客户端发送给服务器端的请求属于哪种字符集和校对规则
设置方法:SET character_set_client = x;
2.服务端收到请求后,应该将请求转换为哪种字符集和校对规则
设置方法:SET character_set_results = x;
3.服务端发送结果集或者错误信息给客户端用哪种字符集和校对规则
设置方法:SET character_set_connection = x;
综合设置方式:SET NAMES ‘x’。这个语句等价于上面3条语句的集合,也就是3中情况都使用相同的字符集。
参考:http://hi.baidu.com/cntjdavid/blog/item/0777a3b421212a758bd4b284.html

在Ubuntu下面编译和测试MySQL Connector/C++

根据readme文档:
1.  cmake .
2.  make clean
make
3.  make install
修改测试代码:

/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>
#include <sstream>
#include <stdexcept>

/*
Include directly the different
headers from cppconn/ and mysql_driver.h + mysql_util.h
(and mysql_connection.h). This will reduce your build time!
*/
#include <cppconn/connection.h>

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>

#define EXAMPLE_HOST "localhost"
#define EXAMPLE_USER "root"
#define EXAMPLE_PASS ""
#define EXAMPLE_DB ""

using namespace std;

/**
* Usage example for Driver, Connection, (simple) [...]

mysql的一些常用命令

在ubuntu上mysql的数据库文件默认在目录/var/lib/mysql下面。
关于mysql在ubuntu上面的存储位置相关问题可以参考这里。
1、查看数据库的连接情况
show processlist;
2、更新数据库表名
alter table old_name rename new_name;
3、将查询结果写入文件
select … into outfile ‘filename‘ from …
4、插入时如果键值重复则更新
insert into … on duplicate key update col_name =  col_name + values(col_name)
5、插入时如果键值重复则忽略
insert ignore into …
6、从旧表中抽取数据创建新数表
a )
Insert into Table2(field1,field2,…) select value1,value2,… from Table1 (Table2必须存在)
b)
create table bak_name as select  *  from original_name (生成的bak 表没有主键及索引)
7、插入新列,修改,删除列
alter table TableToAlter add column col_name type
alter table TableToAlter drop  column col_name;
alter table [...]