Archive for category MySQL

Navicat 的HTTP通道

因为服务器数据库不允许远程连接,这个HTTP通道应该就是Navicat的HTTP数据接口

相关说明:
  支援 HTTP 通道
  当你的ISP不允许直接连线到他们的MySQL server但允许建立HTTP连线时,Navicat可以提供你使用HTTP穿隧(Tunneling)功能。 HTTP穿隧(Tunneling)使用与网站伺服器相同协定(http://)及相同连接埠(port 80)以连接到一个MySQL server。

Navicat安装好后,在安装目录有一个文件:ntunnel_mysql.php

将其上传到网站目录,然后一般设定那IP保留localhost,数据库用户名和密码填上
Tunnel那写http://www.yourdomain.com/…/ntunnel_mysql.php
然后数据库用户名和密码。

  • Share/Bookmark

使用Navicat连接远程数据库2013错误

错误如下:

2013 – lost connection to mysql server during query

或:2013 – lost connection to mysql server at ‘reading initial communication packet’ ,system error:2

用cmd 或phpmyadmin连接倒是正常,而且同一局域网有的正常有的报错

怀疑是Navicat这类工具发出的数据比较特殊,加上本地路由器不稳定,数据包丢失或错误造成的

用了美国的vpn就搞定了,改天再去研究是不是路由器的问题,用的破解版海蜘蛛,不稳定

  • Share/Bookmark

Tags: , , , , , , , , ,

mysql left join 多个表用法

select a.a as a,b.b as b,c.c as c from a left join b on a.id=b.id left join c on b.id=c.id where…

  • Share/Bookmark

Tags:

mysql 模糊查询

select * from table where name like ‘%abc%’ or name1 like ‘_def_’;

% 是通配符,代表多个任意匹配,比如 ‘%人民’ 就是搜索前半段是任意字符,结尾是人民的记录,类似的可以将 % 放在条件字段的任意位置。
_ 是单个字符的统配符,可以匹配单个任意字符。

查询不区分大小写

  • Share/Bookmark

Tags: ,

MySQL:InnoDB和MyISAM的差别

InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。下面是已知的两者之间的差别,仅供参考。

innodb
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。

InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。
InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。
MyISAM
MyISAM 是MySQL缺省存贮引擎 .

每张MyISAM 表被存放在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。

因为MyISAM相对简单所以在效率上要优于InnoDB..小型应用使用MyISAM是不错的选择.

MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦

以下是一些细节和具体实现的差别:

1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的。
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。

另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”

任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。

MyISAM和InnoDB优化:
key_buffer_size – 这对MyISAM表来说非常重要。如果只是使用MyISAM表,可以把它设置为可用内存的 30-40%。合理的值取决于索引大小、数据量以及负载 — 记住,MyISAM表会使用操作系统的缓存来缓存数据,因此需要留出部分内存给它们,很多情况下数据比索引大多了。尽管如此,需要总是检查是否所有的 key_buffer 都被利用了 — .MYI 文件只有 1GB,而 key_buffer 却设置为 4GB 的情况是非常少的。这么做太浪费了。如果你很少使用MyISAM表,那么也保留低于 16-32MB 的 key_buffer_size 以适应给予磁盘的临时表索引所需。
innodb_buffer_pool_size – 这对Innodb表来说非常重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM可以在默认的 key_buffer_size 设置下运行的可以,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。由于Innodb把数据和索引都缓存起来,无需留给操作系统太多的内存,因此如果只需要用Innodb的话则可以设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 如果你的数据量不大,并且不会暴增,那么无需把
innodb_additional_pool_size – 这个选项对性能影响并不太多,至少在有差不多足够内存可分配的操作系统上是这样。不过如果你仍然想设置为 20MB(或者更大),因此就需要看一下Innodb其他需要分配的内存有多少。
innodb_log_file_size 在高写入负载尤其是大数据集的情况下很重要。这个值越大则性能相对越高,但是要注意到可能会增加恢复时间。我经常设置为 64-512MB,跟据服务器大小而异。
innodb_log_buffer_size 默认的设置在中等强度写入负载以及较短事务的情况下,服务器性能还可以。如果存在更新操作峰值或者负载较大,就应该考虑加大它的值了。如果它的值设置太高了,可能会浪费内存 — 它每秒都会刷新一次,因此无需设置超过1秒所需的内存空间。通常 8-16MB 就足够了。越小的系统它的值越小。
innodb_flush_logs_at_trx_commit 是否为Innodb比MyISAM慢1000倍而头大?看来也许你忘了修改这个参数了。默认值是 1,这意味着每次提交的更新事务(或者每个事务之外的语句)都会刷新到磁盘中,而这相当耗费资源,尤其是没有电池备用缓存时。很多应用程序,尤其是从 MyISAM转变过来的那些,把它的值设置为 2 就可以了,也就是不把日志刷新到磁盘上,而只刷新到操作系统的缓存上。日志仍然会每秒刷新到磁盘中去,因此通常不会丢失每秒1-2次更新的消耗。如果设置为 0 就快很多了,不过也相对不安全了 — MySQL服务器崩溃时就会丢失一些事务。设置为 2 指挥丢失刷新到操作系统缓存的那部分事务。
table_cache — 打开一个表的开销可能很大。例如MyISAM把MYI文件头标志该表正在使用中。你肯定不希望这种操作太频繁,所以通常要加大缓存数量,使得足以最大限度地缓存打开的表。它需要用到操作系统的资源以及内存,对当前的硬件配置来说当然不是什么问题了。如果你有200多个表的话,那么设置为 1024 也许比较合适(每个线程都需要打开表),如果连接数比较大那么就加大它的值。我曾经见过设置为 100,000 的情况。
thread_cache — 线程的创建和销毁的开销可能很大,因为每个线程的连接/断开都需要。我通常至少设置为 16。如果应用程序中有大量的跳跃并发连接并且 Threads_Created 的值也比较大,那么我就会加大它的值。它的目的是在通常的操作中无需创建新线程。
query_cache — 如果你的应用程序有大量读,而且没有应用程序级别的缓存,那么这很有用。不要把它设置太大了,因为想要维护它也需要不少开销,这会导致MySQL变慢。通常设置为 32-512Mb。设置完之后最好是跟踪一段时间,查看是否运行良好。在一定的负载压力下,如果缓存命中率太低了,就启用它。
sort_buffer_size –如果你只有一些简单的查询,那么就无需增加它的值了,尽管你有 64GB 的内存。搞不好也许会降低性能。

  • Share/Bookmark

Tags: , , , , , , , , , ,

数据迁移时遇到的麻烦

昨天快疯了,从新加坡搬十几个网站及对应的数据库到本地服务器,由于zip只支持最大2G的文件,只好用tar压缩,谁让国内那些恶心的网站胖得跟猪似的

在dump数据库时出现莫名其妙的错误。。。。郁闷了一下午和晚上,人都快崩了,因为有三个数据库在操作过程中源数据和目标数据都丢失,无语,以前没出现过。。。

忙了一整天,急着恢复数据,能多少是多少,老衲给的隔夜备份又不能用,打开都是乱码,中文是一大堆问号,以为有希望,用UE打开看了一下16进制码,完蛋,没的救了

我遇到的是MYD和MYI文件丢失,但发现有些表还是有数据的,变成InnoDb类型的了,最后一招,关了源数据库,删了ib_logfile0和ib_logfile1文件,再启动数据库,OK,数据都回来了,不过损坏的MyISMA表类型都变成InnoDb,重新dump 过,终于成功

数据备份很重要。。。

  • Share/Bookmark

Tags: , , , , , ,

navicat8.1.20官方简体中文版及注册码

navicat8.1.20官方简体中文版

下载地址:http://download.navicat.com/download/navicat8_mysql_cs.exe

注册码:

3ddown.com

3ddown.com

NAVJ-W56S-3YUU-MVHV

 

官方介绍:

  • Navicat 世界上最强大的MySQL用户界面开发管理工具!

  • 2009.06.05
  • 开发至今,下载Navicat MySQL 管理工具的人数已经照过一千百万人次。目前,Navicat 已被誉为领导市场及最佳使用之MySQL 用户界面管理工具。
  •  

    我们一直在用这个,虽然连接慢了点,但界面很友好

    8.1.20图标变柠檬色了。。。

    • Share/Bookmark

    Tags: , , , , ,

    mysql设为linux服务开机启动

    mysql设为linux服务

    cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql
    chkconfig –add mysql
    chkconfig –level 2345 mysql on
    chown mysql:mysql -R /usr/local/mysql/
    service mysql start

    若提示

    ERROR! MySQL manager or server PID file could not be found!
    Starting MySQL. ERROR! Manager of pid-file quit without updating file.

    表示没配置好

    vi /etc/init.d/mysql
    basedir=/usr/local/mysql

    设置好basedir

    然后再service mysql start

    成功

    • Share/Bookmark

    Tags: , , , , , , , ,

    删除MYSQl BIN-LOG 日志

    mysql> purge binary logs to ‘mysql_bin.000003′;

    Query OK, 0 rows affected (0.16 sec)

    删除mysql_bin.000003之前的而没有包含mysql_bin.000003

    • Share/Bookmark

    Tags:

    mysql 145编号错误处理

    刚才打开一网站,报错:

    145 Table ‘XXX’ is marked as crashed and should be repaired in:……

    查了一下,是mysql 145 编号错误,解决方法如下

    1、用Navicat或phpMyAdmin选择相应表,进行修复

    2、找到mysql的安装目录的bin/myisamchk工具,在命令行中输入:

    myisamchk -c -r ../data/mysql/table.MYI

    最后一个参数为表文件的存放路径

    修复完就OK了

    产生错误原因:

    频繁查询和更新表造成的索引错误;
    MYSQL数据库因为某种原因而受到了损坏,如:数据库服务器突发性的断电、在提在数据库表提供服务时对表的原文件进行某种操作都有可能导致MYSQL数据库表被损坏而无法读取数据。
    总之就是因为某些不可测的问题造成表的损坏。

    • Share/Bookmark

    Tags: , , , , , ,