MySQL 超时时间timeout介绍

1、timeout变量

打开mysql,用show variables like ‘%timeout%’命令查看。

  Continue reading “MySQL 超时时间timeout介绍”

移动 MySQL datadir 的一个小技巧

一般来说,移动 MySQL 资料库只要修改 /etc/mysql/my.cnf 裡面的 datadir 即可…

把原本的注解掉:

 并且填上新的路径

 # 假设这是新路径

然后复制资料库资料

可是当我下指令

的时候,却发现错误,我也找不出问题在哪(权限对了,路径也对了,档案也都在)。后来才发现原来 Ubuntu 还有另一个地方的设定必须要修改,就是 apparmor :先修改 /etc/apparmor.d/usr.sbin.mysqld 这个设定档,找出裡面原本指向 /var/lib/mysql 的目录,全部改为新目录。

注意 datadir= /data/mysql 所指向的目录权限应为mysql可访问的权限,一般情况下mysql数据库目录所属用户和组为mysql和mysql;将新目录设置为如下:

然后重启动就可以了!

Ubuntu下安装支持Oracle的PHP扩展

Install Oracle Instant Client

Download Oracle Instant Client packages

First, select right client for your OS here(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html),
Instant Client for Linux x86-64(http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html) in my case for my 64-bit Ubuntu 14.04.
Then Accept License Agreement and download basic & devel rpm packages for your Oracle version.
Our Oracle DB version is 11g r2, so I need to download:

oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm

Install the instant client

Convert .rpm to Debian software package (.deb) using alien:

sudo apt-get install alien
sudo alien -d oracle-instantclient11.2-basic-11.2.0.1.0-1.x86_64.rpm
sudo alien -d oracle-instantclient11.2-devel-11.2.0.1.0-1.x86_64.rpm

This will output oracle-instantclient11.2-basic-11.2.0.1.0-2.x86_64.deb & oracle-instantclient11.2-devel-11.2.0.1.0-2.x86_64.deb which can be installed via Ubuntu’s dpkg command:

sudo dpkg -i oracle-instantclient11.2-basic_11.2.0.1.0-2_amd64.deb
sudo dpkg -i oracle-instantclient11.2-devel_11.2.0.1.0-2_amd64.deb

After successful installation, client library with be installed in /usr/share/oracle/11.2/client64, and developer header files with be in /usr/include/oracle/11.2/client64.

Continue reading “Ubuntu下安装支持Oracle的PHP扩展”

MySQL添加用户与授权

一、创建用户

命令: CREATE USER ‘username’@’host’ IDENTIFIED BY ‘password’;

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

例子:

[sql]
CREATE USER ‘dog’@’localhost’ IDENTIFIED BY ‘123456’;
CREATE USER ‘pig’@’192.168.1.101_’ IDENDIFIED BY ‘123456’;
CREATE USER ‘pig’@’%’ IDENTIFIED BY ‘123456’;
CREATE USER ‘pig’@’%’ IDENTIFIED BY ”;
CREATE USER ‘pig’@’%’;
[/sql]

Continue reading “MySQL添加用户与授权”

POSTGRESQL 无法创建数据库 出现类似createdb: could not connect to database postgres: FATAL: role “XXXX” does not exist

I figured I’d share getting setup on my Ubuntu machine.

Installing
[shell]
sudo apt-get install postgresql
[/shell]

Creating User
[shell]
createdb book
createuser: could not connect to database postgres: FATAL:  role "myusername" does not exist
[/shell]
Continue reading “POSTGRESQL 无法创建数据库 出现类似createdb: could not connect to database postgres: FATAL: role “XXXX” does not exist”

SQLite资料

Sqlite是一种嵌入式/内存轻型数据库,它跨平台,快速,小巧,高效。如果你想选择小型数据库,我相信sqlite将是最佳的选择。它要比access数据库强大很多很多。当然如果你想说MSSQL或者MySQL要比SQLite高效的多。这一点我解释如下:

首先:sqlite定位是小型数据库(轻型),处理大数据自然有局限性。定位标准不同。

其次:sqlite在处理小型数据并不逊色于大型数据库,而且他体积更小。

由于这方面的资料比较多,我以链接的形式来介绍。

 

入门:

什么是SQLitehttp://baike.baidu.com/view/19310.htm

Sqlite官网:http://www.sqlite.org/

Sqlite中文社区:http://www.sqlite.com.cn/

最希望大家去的sqlite官网,里面写的很详细,虽然是英文。

 

Sqlite局限:

Sqlite局限性:http://apps.hi.baidu.com/share/detail/17043674

Sqlite不支持的操作:http://apps.hi.baidu.com/share/detail/17095537

 

Sqlite封装:

CppSqlitehttp://www.codeproject.com/KB/database/CppSQLite.aspx 

该类是最方便的类之一,可惜不支持加密和中文路径,后来有人做了改进

支持中文路径:http://hi.baidu.com/wangguang246/blog/item/4a521f96f5b2006355fb96bf.html

 

关于加密:

wxSqlite3http://wxcode.sourceforge.net/components/wxsqlite3/ 

这个库更新的很快,完全和sqlite3的发布同步,同时支持强大的加密功能,但是这个类使用关于麻烦,后来有人仅仅获取里面的加密功能和CppSqlite结合使用。

加密的另一种方案:http://news.2ky.cn/149/4101.htm 

 

如何编加密版本的sqlite

如何使用VC6编译sqlite3源码生成动态链接库

http://blog.csdn.net/littletigerat/archive/2010/04/19/5502491.aspx

如何对sqlite3数据库进行加密

http://blog.csdn.net/littletigerat/archive/2010/04/20/5502690.aspx

如果编译加密版本的sqlite请认真看上面两篇博客,我亲自测试,但是有些错误,后来做了一些说明:

上面的教程中有许些错误(测试版本3.73

1vc6编译sqlite源码的时候操作的时候,会提示提示出现找不到:“sqlite3rtree.h”头文件

解决方法:这个地方改成rtree.h

2:编译加密时候复制 到pagec的时候,同时要把复制的文件中的#include sqlite3.c”去掉

3:引用的时候要把sqlite3.h中的#ifdef SQLITE_HAS_CODEC以及对应的#endif去掉

 

 

Sqlite数据库查看工具

1:官网自带的工具,黑色的doc,不好用~

2Navicat for SQLite

http://www.sz1001.net/soft/43670.htm 

MySQL的mysqldump工具的基本用法

导出要用到MySQL的mysqldump工具,基本用法是:   

shell> mysqldump [OPTIONS] database [tables]  

如果你不给定任何表,整个数据库将被导出。   

通过执行mysqldump –help,你能得到你mysqldump的版本支持的选项表。  

注意,如果你运行mysqldump没有–quick或–opt选项,mysqldump将在导出结果前装载整个结果集到内存中,如果你正在导出一个大的数据库,这将可能是一个问题。  

mysqldump支持下列选项:   

–add-locks   
在每个表导出之前增加LOCK TABLES并且之后UNLOCK TABLE。(为了使得更快地插入到MySQL)。   
–add-drop-table   
在每个create语句之前增加一个drop table。   
–allow-keywords   
允许创建是关键词的列名字。这由表名前缀于每个列名做到。   
-c, –complete-insert   
使用完整的insert语句(用列名字)。   
-C, –compress   
如果客户和服务器均支持压缩,压缩两者间所有的信息。   
–delayed   
用INSERT DELAYED命令插入行。   
-e, –extended-insert   
使用全新多行INSERT语法。(给出更紧缩并且更快的插入语句)   
-#, –debug[=option_string]   
跟踪程序的使用(为了调试)。   

–help  

显示一条帮助消息并且退出。   
–fields-terminated-by=…   
   
–fields-enclosed-by=…   
   
–fields-optionally-enclosed-by=…   
   
–fields-escaped-by=…   
   
–fields-terminated-by=…   


这些选择与-T选择一起使用,并且有相应的LOAD DATA INFILE子句相同的含义。   
LOAD DATA INFILE语法。   
-F, –flush-logs   
在开始导出前,洗掉在MySQL服务器中的日志文件。   
-f, –force,   
即使我们在一个表导出期间得到一个SQL错误,继续。   
-h, –host=..   
从命名的主机上的MySQL服务器导出数据。缺省主机是localhost。   
-l, –lock-tables.   
为开始导出锁定所有表。   
-t, –no-create-info   
不写入表创建信息(CREATE TABLE语句)   
-d, –no-data   
不写入表的任何行信息。如果你只想得到一个表的结构的导出,这是很有用的!   
–opt   
同–quick –add-drop-table –add-locks –extended-insert –lock-tables。   
应该给你为读入一个MySQL服务器的尽可能最快的导出。   
-pyour_pass, –password[=your_pass]   
与服务器连接时使用的口令。如果你不指定“=your_pass”部分,mysqldump需要来自终端的口令。   
-P port_num, –port=port_num   
与一台主机连接时使用的TCP/IP端口号。(这用于连接到localhost以外的主机,因为它使用 Unix套接字。)   
-q, –quick   
不缓冲查询,直接导出至stdout;使用mysql_use_result()做它。   
-S /path/to/socket, –socket=/path/to/socket   
与localhost连接时(它是缺省主机)使用的套接字文件。   
-T, –tab=path-to-some-directory   
对于每个给定的表,创建一个table_name.sql文件,它包含SQL CREATE 命令,和一个table_name.txt文件,它包含数据。 注意:这只有在mysqldump运行在mysqld守护进程运行的同一台机器上的时候才工作。.txt文件的格式根据–fields-xxx和–lines–xxx选项来定。   
-u user_name, –user=user_name   
与服务器连接时,MySQL使用的用户名。缺省值是你的Unix登录名。   
-O var=option, –set-variable var=option设置一个变量的值。可能的变量被列在下面。   
-v, –verbose   
冗长模式。打印出程序所做的更多的信息。   
-V, –version   
打印版本信息并且退出。   
-w, –where=\’where-condition\’   
只导出被选择了的记录;注意引号是强制的!   
“–where=user=\’jimf\'” “-wuserid>1” “-wuserid<1” 

最常见的mysqldump使用可能制作整个数据库的一个备份:  
mysqldump –opt database > backup-file.sql   
但是它对用来自于一个数据库的信息充实另外一个MySQL数据库也是有用的:   
mysqldump –opt database | mysql –host=remote-host -C database   
由于mysqldump导出的是完整的SQL语句,所以用mysql客户程序很容易就能把数据导入了:   
shell> mysqladmin create target_db_name   
shell> mysql target_db_name < backup-file.sql  
就是  
shell> mysql 库名 < 文件名 

================================

几个常用用例:

1.导出整个数据库
 mysqldump -u 用户名 -p 数据库名 > 导出的文件名    
 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql
2.导出一个表
 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql
3.导出一个数据库结构
  mysqldump -u wcnc -p -d –add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
 -d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table 
4.导入数据库
  常用source 命令
  进入mysql数据库控制台,
  如mysql -u root -p 
  
  mysql>use 数据库
  然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
  mysql>source d:\wcnc_db.sql

load data infile 导入数据 InnoDB 外键约束

用户表:user
主键:id

内容表:post
主键:id
外键:user_id(关联到 user 表的主键 id)

post 表的数据文件存在文本文件中,字段之间用 tab 分隔,当要把文件导入到 post 表时,因 user 和 post 都是 InnoDB 引擎的,有外键约束,运行导入语句:

load data infile '/home/leakon/post.sql' ignore into table post ignore 1 lines ( user_id, title, unixtime );

MySQL 报错,信息如下:

Cannot add or update a child row: a foreign key constraint fails (leakon/post, CONSTRAINT post_FK_1 FOREIGN KEY (user_id) REFERENCES user (id))

反复尝试,总是失败,后来查了一下解决办法,只要在装载数据之前,插入下述语句,即可暂时关闭外键约束检查:

SET FOREIGN_KEY_CHECKS = 0;

然后再次运行 load data infile 语句,即可立即导入数据。

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’

今天服务器遇到了一个很熟悉的问题输入#mysql -u root -pERROR 2002 (HY000):Can’t connect to local MySQL server随即上网找寻答案根据大家提供的方法我逐一尝试
方案1.
1.#ps -A|grep mysql 显示类似:1829 ? 00:00:00 mysqld_safe
1876 ? 00:00:31 mysqld
2.#kill -9 1829
3.#kill -9 1876
4.#/etc/init.d/mysql restart
5.#mysql -u root -p 他的麻烦解决了,我的还没解决!
继续找方案2
先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.
————————————————————————————
[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql
[root@localhost beinan]# /etc/init.d/mysqld start
启动 MySQL: [ 确定 ]
[root@localhost lib]# mysqladmin -uroot password ‘123456’
[root@localhost lib]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3 to server version: 4.1.11

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffe他的也解决了,我的麻烦还在继续,依然继续寻找
方案3
问题解决了,竟然是max_connections=1000 他说太多了,然后改成500也说多,无奈删之问题解决了。还是不行
方案4 /var/lib/mysql 所有文件权限 改成mysql.mysql 不行不行方案5
摘要:解决不能通过mysql.sock连接MySQL问题 这个问题主要提示是,不能通过 ‘/tmp/mysql.sock’连到服务器,而php标准配置正是用过’/tmp/mysql.sock’,但是一些mysql安装方法将 mysql.sock放在/var/lib/mysql.sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可 以看到如下的东东:
[mysqld]
socket=/var/lib/mysql.sock
改一下就好了,但也会引起其他的问题,如mysql程序连不上了,再加一点:
[mysql]
socket=/tmp/mysql.sock
或者还可以通过修改php.ini中的配置来使php用其他的mysql.sock来连,这个大家自己去找找

或者用这样的方法:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

成功了,就是这样ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

OK!

以上资料是网上的资料
我今天遇到的情况是我使用的mysqld_safe –user=mysql &重启mysql发现无法启动mysql,最后用/etc/init.d/mysqld start启动成功