mys

阅读 / 问答 / 标签

php如何修改MySql数据库中smallint字段内的值?

$sql = "UPDATE viplevel SET vip=15 WHERE uid=$uid";

mysql中int,bigint,smallint和tinyint的区别与长度

-- int从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 -- bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 -- smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。 -- tinyint从 0 到 255 的整型数据。存储大小为 1 字节。 -- 在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint -- 在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。 只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。 -- int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。

mysql中int,bigint,smallint和tinyint的区别与长度

最近使用mysql数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint。其中比较迷惑的是int和smallint的差别。今天就在网上仔细找了找,找到如下内容,留档做个总结: 使用整数数据的精确数字数据类型。 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 int 从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。 tinyint 从 0 到 255 的整型数据。存储大小为 1 字节。 注释 在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。 在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。 只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。 int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。

mysql中sql语句id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,是什么意思

补充一下:SMALLINT [UNSIGNED] 带符号的范围是-32768到32767。无符号的范围是0到65535。其他的 badkano 说的都没什么问题了......

Mysql的smallint(3)和smallint范围都是-32768到32767,他们到底有什么区别?

从 -2^15 (-32,768) 到 2^15 - 1 (32,767)smallint(3) 和 smallint 长度是一样的,不同的是:smallint(3)类型的,如果从数据库中取出的少于3位,自动用空格填补

Mysql中为什么不都用int,而要区分tinyint,smallint等

tinyint和smallint占用的存储空间更小smallint 存储大小为 2 个字节。tinyint 存储大小为 1 字节。int存储大小为4个字节。

mysql中int,bigint,smallint 和 tinyint的区别与长度的含义

最近使用MySQL数据库的时候遇到了多种数字的类型,主要有int,bigint,smallint和tinyint。其中比较迷惑的是int和smallint的差别。今天就在网上仔细找了找,找到如下内容,留档做个总结:使用整数数据的精确数字数据类型。bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数int从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。smallint从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。tinyint从 0 到 255 的整型数据。存储大小为 1 字节。注释在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint。在 SQL Server 中,int 数据类型是主要的整数数据类型。在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。SQL Server 不会自动将其它整数数据类型(tinyint、smallint 和 int)提升为 bigint。int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。

mysql中的smallint可以表示多大的数?

现在的32位机器,int类型为32位,可以表达的最大数为2的32次方。smallint应该比int小,我猜是16位吧,和short一样。表示范围应该是2的16次方。如果考虑一位用来表示正负数,那么就只能表示2的15次方了。

mysql中int,bigint,smallint和tinyint的区别与长度

-- int从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。 -- bigint从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数 -- smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。 -- tinyint从 0 到 255 的整型数据。存储大小为 1 字节。 -- 在支持整数值的地方支持 bigint 数据类型。但是,bigint 用于某些特殊的情况,当整数值超过 int 数据类型支持的范围时,就可以采用 bigint -- 在数据类型优先次序表中,bigint 位于 smallmoney 和 int 之间。 只有当参数表达式是 bigint 数据类型时,函数才返回 bigint。

mysql中int,bigint,smallint 和 tinyint的区别与长度的含义

1.TINYINT[(M)] [UNSIGNED] [ZEROFILL] M默认为4很小的整数。带符号的范围是-128到127。无符号的范围是0到255。2.SMALLINT[(M)] [UNSIGNED] [ZEROFILL] M默认为6小的整数。带符号的范围是-32768到32767。无符号的范围是0到65535。3. INT[(M)] [UNSIGNED] [ZEROFILL] M默认为11普通大小的整数。带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。4.BIGINT[(M)] [UNSIGNED] [ZEROFILL] M默认为20大整数。带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。注意:这里的M代表的并不是存储在数据库中的具体的长度,以前总是会误以为int(3)只能存储3个长度的数字,int(11)就会存储11个长度的数字,这是大错特错的。tinyint(1) 和 tinyint(4) 中的1和4并不表示存储长度,只有字段指定zerofill是有用,如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。

MySQL备份的几种方式的讨论,重点关注在线热备

MySQL的备份方式,目前我想到的有五种,有可能还有 1,mysqldump方式,加上具体参数名(单库,多库,触发器,存储过程,表结构,字符集,single-transaction,等等) 2,mysqlhotcopy 只能备份myisam数据表备份,速度相当快,因为是文件拷贝,可能瞬间被锁表 MySQL的备份方式,目前我想到的有五种,有可能还有 1,mysqldump方式,加上具体参数名(单库,多库,触发器,存储过程,表结构,字符集,u2013single-transaction,等等)2,mysqlhotcopy 只能备份myisam数据表备份,速度相当快,因为是文件拷贝,可能瞬间被锁表,任何的数据操作,比如插入和更新都会挂起。3,LVM的快照功能进行数据库分区的备份,这种方法是利用的逻辑卷的镜像功能,对整个分区进行在线备份,这种备份数据量大,而且备份性能低下,因为每次备份都是整个镜像,不能针对数据做备份。桶装备份4,开启二进制同步日志功能,主从复制,从机器做备份功能。5,在线的热备份,采用开源的 Xtrabackup 备份工具对innodb 数据表进行在线备份,测试阶段。下面是备份的xtrabackup的测试例子。[@root.localhost.nova ~]# /usr/bin/innobackupex-1.5.1 u2013user=rootu2013defaults-file=/home/mysql/my.cnf u2013socket=/home/mysql/mysql.socku2013database=serverinfo u2013slave-info u2013stream=tar /root/ |gzip >/root/bak_mysql.tar.gzInnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.All Rights Reserved.This software is published underthe GNU GENERAL PUBLIC LICENSE Version 2, June 1991.IMPORTANT: Please check that the backup run completes successfully.At the end of a successful backup run innobackupprints “innobackup completed OK!”.innobackupex: Using mysql Ver 14.12 Distrib 5.0.83, for pc-linux-gnu (i686) using readline 5.1innobackupex: Using mysql server version 5.0.83-community-loginnobackupex: Created backup directory /root090823 17:37:51 innobackupex: Starting mysql with options: u2013unbuffered u2013user=root u2013socket=/home/mysql/mysql.sock090823 17:37:51 innobackupex: Connected to database with mysql child process (pid=28803)090823 17:37:55 innobackupex: Connection to database server closed090823 17:37:55 innobackupex: Starting ibbackup with command:xtrabackup u2013defaults-file=/home/mysql/my.cnf u2013backup u2013suspend-at-endu2013log-stream u2013target-dir=./innobackupex: Waiting for ibbackup (pid=28809) to suspendinnobackupex: Suspend file u2018/home/mysql/xtrabackup_suspendedu2019xtrabackup: suspend-at-end is enabled.xtrabackup: uses posix_fadvise().xtrabackup: cd to /home/mysqlxtrabackup: Target instance is assumed as followings.xtrabackup: innodb_data_home_dir = ./xtrabackup: innodb_data_file_path = ibdata1:10M:autoextendxtrabackup: innodb_log_group_home_dir = ./xtrabackup: innodb_log_files_in_group = 2xtrabackup: innodb_log_file_size = 4194304xtrabackup: Stream mode.>> log scanned up to (0 85364)090823 17:37:57 innobackupex: Continuing after ibbackup has suspendedinnobackupex: Starting to backup InnoDB tables and indexesinnobackupex: from original InnoDB data directory u2018/home/mysqlu2019innobackupex: Backing up as tar stream u2018ibdata1u2032innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_djgameserver.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_djgameserverlog.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_repairhistory.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_serverinfo.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_serverinfolog.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_tlgameserver.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_tlgameserverlog.ibdu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_user.ibdu2019090823 17:37:58 innobackupex: Starting mysql with options: u2013unbuffered u2013user=root u2013socket=/home/mysql/mysql.sock090823 17:37:58 innobackupex: Connected to database with mysql child process (pid=28834)>> log scanned up to (0 85364)090823 17:38:02 innobackupex: Starting to lock all tablesu2026>> log scanned up to (0 85364)>> log scanned up to (0 88314)>> log scanned up to (0 88415)090823 17:38:20 innobackupex: All tables locked and flushed to disk090823 17:38:20 innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,innobackupex: .TRG, .TRN, and .opt files ininnobackupex: subdirectories of u2018/home/mysqlu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_djgameserver.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_djgameserverlog.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_repairhistory.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_serverinfo.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_serverinfolog.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_tlgameserver.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_tlgameserverlog.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/simsys_user.frmu2019innobackupex: Backing up file u2018/home/mysql/serverinfo/db.optu2019090823 17:38:20 innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI, .TRG, .TRN, and .opt filesinnobackupex: Resuming ibbackupxtrabackup: The latest check point (for incremental): u20180:88415u2032>> log scanned up to (0 88415)xtrabackup: Transaction log of lsn (0 85364) to (0 88415) was copied.090823 17:38:24 innobackupex: All tables unlocked090823 17:38:24 innobackupex: Connection to database server closedinnobackupex: Backup created in directory u2018/rootu2019innobackupex: MySQL binlog position: filename ”, positioninnobackupex: MySQL slave binlog position: master host ”, filename ”, position090823 17:38:24 innobackupex: innobackup completed OK! innobackupex: You must use -i (u2013ignore-zeros) option for extraction of the tar stream.[@root.localhost.nova ~]#[@root.localhost.nova ~]# ls -ltrtotal 11752drwxr-xr-x 2 oracle ftp 4096 Apr 20 15:43 linux-rw-ru2013ru2013 1 root root 17969 Apr 20 15:43 linux.tgz-rw-ru2013ru2013 1 root root 4698 Jun 5 16:08 install.sh-rw-ru2013ru2013 1 root root 3565 Jun 18 11:21 HP-set.sh-rw-ru2013ru2013 1 root root 98676 Jul 27 13:33 install.log.syslog-rw-ru2013ru2013 1 root root 68464 Jul 27 13:33 install.log-rw-ru2013ru2013 1 root root 1299 Jul 27 13:33 anaconda-ks.cfg-rw-rw—- 1 mysql mysql 10485760 Aug 14 10:57 ibdata1-rw-ru2013ru2013 1 root root 1230176 Aug 23 17:12 xtrabackup-0.7-1.rhel4.x86_64.rpm-rw-ru2013ru2013 1 root root 44998 Aug 23 17:38 bak_mysql.tar.gz[@root.localhost.nova ~]#[@root.localhost.nova tmp]# ls -lR.:total 10336-rw-ru2013ru2013 1 root root 259 Aug 23 17:37 backup-my.cnf-rw-ru2013ru2013 1 root root 44998 Aug 23 17:43 bak_mysql.tar.gz-rw-rw—- 1 mysql mysql 10485760 Aug 23 17:28 ibdata1-rw-ru2013ru2013 1 root root 0 Aug 23 17:37 mysql-stderr-rw-ru2013ru2013 1 root root 506 Aug 23 17:38 mysql-stdoutdrwxr-xr-x 2 root root 380 Aug 23 17:43 serverinfo-rw-ru2013ru2013 1 root root 1 Aug 23 17:38 xtrabackup_binlog_info-rw-ru2013ru2013 1 root root 60 Aug 23 17:38 xtrabackup_checkpoints-rw-ru2013ru2013 1 root root 5632 Aug 23 17:38 xtrabackup_logfile-rw-ru2013ru2013 1 root root 53 Aug 23 17:38 xtrabackup_slave_info./serverinfo:total 1020-rw-rw—- 1 mysql mysql 61 Aug 12 19:59 db.opt-rw-rw—- 1 mysql mysql 34626 Aug 12 20:00 simsys_djgameserver.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_djgameserver.ibd-rw-rw—- 1 mysql mysql 8760 Aug 12 20:00 simsys_djgameserverlog.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_djgameserverlog.ibd-rw-rw—- 1 mysql mysql 12944 Aug 12 20:00 simsys_repairhistory.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_repairhistory.ibd-rw-rw—- 1 mysql mysql 26072 Aug 12 20:00 simsys_serverinfo.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_serverinfo.ibd-rw-rw—- 1 mysql mysql 8760 Aug 12 20:00 simsys_serverinfolog.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_serverinfolog.ibd-rw-rw—- 1 mysql mysql 56550 Aug 12 20:00 simsys_tlgameserver.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_tlgameserver.ibd-rw-rw—- 1 mysql mysql 8760 Aug 12 20:00 simsys_tlgameserverlog.frm-rw-rw—- 1 mysql mysql 98304 Aug 12 20:00 simsys_tlgameserverlog.ibd-rw-rw—- 1 mysql mysql 8646 Aug 12 20:00 simsys_user.frm-rw-rw—- 1 mysql mysql 98304 Aug 14 10:57 simsys_user.ibd备份出来的文件是:bak_mysql.tar.gz,解压方法:tar zxvfi bak_mysql.tar.gz恢复时候就采用复制文件,覆盖,然后mysqldump方式导入导出。http://www.imdba.cn/2009/08/31/mysqlbakup-eg/

生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库

生产环境究竟是使用mysqldump还是xtrabackup来备份与恢复数据库root@client2:/var/lib/my;total77860;drwx------8mysqlmysql409;drwxr-xr-x38rootroot4096;-rw-r--r--1rootroot0Jan5;drwx------2mysqlmysql409;-rw-rw----1mysqlmysql692;-rw-rw----1mysqlmysroot@client2:/var/lib/mysql# lltotal 77860drwx------ 8 mysql mysql 4096 Mar 7 21:06 ./drwxr-xr-x 38 root root 4096 Mar 7 19:52 ../-rw-r--r-- 1 root root 0 Jan 5 14:22 debian-5.5.flagdrwx------ 2 mysql mysql 4096 Feb 11 17:39 django/-rw-rw---- 1 mysql mysql 69206016 Mar 7 21:02 ibdata1-rw-rw---- 1 mysql mysql 5242880 Mar 7 21:02 ib_logfile0-rw-rw---- 1 mysql mysql 5242880 Mar 7 21:01 ib_logfile1drwx------ 2 mysql mysql 4096 Jan 5 22:55 monitor/drwx------ 2 mysql root 4096 Jan 5 14:22 mysql/-rw-rw---- 1 root root 6 Jan 5 14:22 mysql_upgrade_infodrwx------ 2 mysql mysql 4096 Jan 5 14:22 performance_schema/drwxr-xr-x 2 mysql mysql 4096 Mar 7 21:03 test/drwxr-xr-x 2 mysql mysql 4096 Mar 7 19:58 xtrbackup/然后启动mysql,并查看test数据库的表里内容root@client2:/var/lib/mysql# service mysql startmysql start/running, process 12730root@client2:/var/lib/mysql# mysql -u root -pEnter password:Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 36Server version: 5.5.28-0ubuntu0.12.04.3-log (Ubuntu)Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type "help;" or "h" for help. Type "c" to clear the current input statement.mysql> use test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select * from test;+------+| id |+------+| 1 || 2 || 3 || 5 |+------+5 rows in set (0.01 sec)可以看到数据库已经恢复完成可能大家有个疑问,为什么我这里不像很多网上的文章里是在apply-log后,使用copy-back如果使用/usr/bin/innobackupex --copy-back命令后,会报Original data directory is not empty! at /usr/local/xtrabackup/bin/innobackupex line 538.恢复的目录必须为空。经查官网,这是xtrabackup的一个BUG。innobackupex–copy-back was run. With this bug fix, innobackupex–copy-back operation if the destination is not empty, avoiding potential data loss or a strang combination of a restored backup and previous data. Bug Fixed: #737569 (Valentine Gostev) will now error out of the did not check that MySQL datadir was empty before所以在apply-log后直接复制数据目录到数据库的位置上吧。三、对数据库的增量备份与恢复为了进行增量备份,先对数据库添加一些数据mysql> insert into test values(11);Query OK, 1 row affected (0.10 sec)mysql> insert into test values(12);Query OK, 1 row affected (0.05 sec)mysql> insert into test values(13);Query OK, 1 row affected (0.00 sec)mysql> insert into test values(14);Query OK, 1 row affected (0.00 sec)mysql> insert into test values(15);Query OK, 1 row affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.01 sec)mysql> select * from test;+------+| id |+------+| 1 || 2 || 3 || 4 || 5 || 11 || 13 || 14 || 15 |+------+10 rows in set (0.00 sec)然后进行增量的备份root@client2:/var/lib/mysql# innobackupex --user=root --password=123456 --database=test --incremental --incremental-basedir=/tmp/restore/ /tmp/dataInnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oyand Percona Inc 2009-2012. All Rights Reserved.This software is published underthe GNU GENERAL PUBLIC LICENSE Version 2, June 1991.130307 21:13:38 innobackupex: Starting mysql with options: --password=xxxxxxxx --user="root" --unbuffered --130307 21:13:38 innobackupex: Connected to database with mysql child process (pid=12864) 130307 21:13:44 innobackupex: Connection to database server closedIMPORTANT: Please check that the backup run completes successfully.At the end of a successful backup run innobackupexprints "completed OK!".innobackupex: Using mysql Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (x86_64) using readline 6.2innobackupex: Using mysql server version Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.innobackupex: Created backup directory /tmp/data/2013-03-07_21-13-44130307 21:13:44 innobackupex: Starting mysql with options: --password=xxxxxxxx --user="root" --unbuffered --130307 21:13:44 innobackupex: Connected to database with mysql child process (pid=12891) 130307 21:13:46 innobackupex: Connection to database server closed130307 21:13:46 innobackupex: Starting ibbackup with command: xtrabackup_55 --backup --suspend-at-end --target-dir=/tmp/data/2013-03-07_21-13-44 --incremental-basedir="/tmp/restore/"innobackupex: Waiting for ibbackup (pid=12898) to suspendinnobackupex: Suspend file "/tmp/data/2013-03-07_21-13-44/xtrabackup_suspended"xtrabackup_55 version 1.6.7 for Percona Server 5.5.16 Linux (x86_64) (revision id: undefined) incremental backup from 59605543 is enabled.xtrabackup: uses posix_fadvise().xtrabackup: cd to /var/lib/mysqlxtrabackup: Target instance is assumed as followings.xtrabackup: innodb_data_home_dir = ./xtrabackup: innodb_data_file_path = ibdata1:10M:autoextendxtrabackup: innodb_log_group_home_dir = ./xtrabackup: innodb_log_files_in_group = 2xtrabackup: innodb_log_file_size = 5242880130307 21:13:46 InnoDB: Using Linux native AIO>> log scanned up to (59606124)[01] Copying ./ibdata1to /tmp/data/2013-03-07_21-13-44/ibdata1.delta[01] ...done130307 21:13:50 innobackupex: Continuing after ibbackup has suspended130307 21:13:50 innobackupex: Starting mysql with options: --password=xxxxxxxx --user="root" --unbuffered --130307 21:13:50 innobackupex: Connected to database with mysql child process (pid=12913) >> log scanned up to (59606124)130307 21:13:52 innobackupex: Starting to lock all tables...>> log scanned up to (59606124)>> log scanned up to (59606124)130307 21:14:03 innobackupex: All tables locked and flushed to disk130307 21:14:03 innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,innobackupex: .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV and .opt files ininnobackupex: subdirectories of "/var/lib/mysql"innobackupex: Backing up file "/var/lib/mysql/test/test.frm"innobackupex: Backing up file "/var/lib/mysql/test/db.opt"130307 21:14:03 innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSV, .CSM and .opt filesinnobackupex: Resuming ibbackupxtrabackup: The latest check point (for incremental): "59606124">> log scanned up to (59606124)xtrabackup: Stopping log copying thread.xtrabackup: Transaction log of lsn (59606124) to (59606124) was copied.130307 21:14:05 innobackupex: All tables unlocked130307 21:14:05 innobackupex: Connection to database server closedinnobackupex: Backup created in directory "/tmp/data/2013-03-07_21-13-44"innobackupex: MySQL binlog position: filename "mysql-bin.000023", position 107130307 21:14:05 innobackupex: completed OK!其中,--incremental指明是增量备份,--incremental-basedir指定上次完整备份或者增量备份文件的位置。这里的增量备份其实只针对的是InnoDB,对于MyISAM来说,还是完整备份。 在进行增量备份的恢复之前,先关闭数据库,然后删除数据库testroot@client2:/var/lib/mysql# service mysql stopmysql stop/waitingroot@client2:/var/lib/mysql# rm -rf testroot@client2:/var/lib/mysql# lltotal 77856drwx------ 7 mysql mysql 4096 Mar 7 21:17 ./drwxr-xr-x 38 root root 4096 Mar 7 19:52 ../-rw-r--r-- 1 root root 0 Jan 5 14:22 debian-5.5.flagdrwx------ 2 mysql mysql 4096 Feb 11 17:39 django/-rw-rw---- 1 mysql mysql 69206016 Mar 7 21:17 ibdata1-rw-rw---- 1 mysql mysql 5242880 Mar 7 21:17 ib_logfile0-rw-rw---- 1 mysql mysql 5242880 Mar 7 21:11 ib_logfile1drwx------ 2 mysql mysql 4096 Jan 5 22:55 monitor/drwx------ 2 mysql root 4096 Jan 5 14:22 mysql/-rw-rw---- 1 root root 6 Jan 5 14:22 mysql_upgrade_infodrwx------ 2 mysql mysql 4096 Jan 5 14:22 performance_schema/drwxr-xr-x 2 mysql mysql 4096 Mar 7 19:58 xtrbackup/增量备份的恢复root@client2:/var/lib/mysql# innobackupex -user=root --password=123456 --defaults-file=/etc/mysql/my.cnf --apply-log /tmp/restore/ --incremental-dir=/tmp/data/2013-03-07_21-13-44/InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oyand Percona Inc 2009-2012. All Rights Reserved.This software is published underthe GNU GENERAL PUBLIC LICENSE Version 2, June 1991.IMPORTANT: Please check that the apply-log run completes successfully.At the end of a successful apply-log run innobackupexprints "completed OK!".130307 21:18:20 innobackupex: Starting ibbackup with command: xtrabackup_55 --defaults-file="/etc/mysql/my.cnf" --prepare --target-dir=/tmp/restore --incremental-dir=/tmp/data/2013-03-07_21-13-44/xtrabackup_55 version 1.6.7 for Percona Server 5.5.16 Linux (x86_64) (revision id: undefined) incremental backup from 59605543 is enabled.xtrabackup: cd to /tmp/restore

mysql idb frm trg trn是什么文件

【MySQL文件】MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL文件就是SQL文件,里面就是建表语句 以.SQL为后缀。SQL脚本是包含一到多个SQL命令的SQL语句。以将这些SQL脚本放在一个文本文件中(SQL脚本文件),然后通过相关的命令执行这个SQL脚本文件。【IDB文件】IDB智能数据库系统(multimedia intelligent database system)是一个对象数据库管理系统。智能数据库是研究利用人的推理、想像、记忆原理,实现对数据库的存储、搜索和修改。通过有效的组织,能够满足人们快速检索和修改数据库的要求。IDB文件是一种 MSDev 中间层文件。当IDB文件在IDA打开,数据解压到的文件的集合。后的数据库被关闭时,该文件被压缩回IDB文件。这使得更快的性能,同时在数据库打开和较低的磁盘使用时关闭。< H1 >其他IDB格式: < /H1 >在调试过程中由一个Visual Studio程序中创建的中间文件,如Visual C, 节省了编译器的状态,并用于最小的重建计划和增量编译。【PAR文件】PAR文件为交换文件,主要是Windows环境下的文件名 。绝大多数DOS文件名后缀在Windows下继续有效,但Windows本身也引出了许多种崭新的后缀名,如:*.drv为设备驱动程序(Driver)、*.fon和*.fot都是字库文件、*.grp为分组文件(Group)、*.ini为初始化信息文件 (Initiation)、*.pif为DOS环境下的可执行文件在Windows下执行时所需要的文件格式、*.crd即卡片文件(Card)、*.rec即记录器宏文件(Record)、*.wri即文本文件(Write),它是字处理write.exe生成的文件、*.doc和*.rtf也是文本文件(Document),它们是Word产生的文件、*.cal为日历文件、*.clp是剪贴板中的文件格式、*.htm和 *.html即主页文件、*.par为交换文件、*.pwl为口令文件(Password)等等。【FRM文件】FRM文件是文本类型文件,用记事本就可以打开,而且也可以保存。FRM文件扩展名信息:1.表单;2.Frame Maker或Frame Builder文档;3.Oracle可执行表(3.0版或早期版本);4.Visual Basic表单;5.WordPerfect Merge表单;6.DataCAD标志报表文件。

Mysql8.0数据字典系列一:为什么改变

Mysql8.0有着非常亮眼的新特性,其中之一便是数据字典的改变。正如我们使用mysql来存储业务数据,同理,mysql自己也需要存放自己的数据,这部分即称之为元数据。在8.0之前,元数据是以.frm,PAR,OPT,TRN,TRG,isl这几种文件形式或其他形式来存储,这种元数据存储方式在很多场景下成为了一个瓶颈或者缺陷,就像下面提到的六点:(注:frm:表元数据文件,存放表的定义,par:分区定义文件,db.opt:数据库配置文件,isl:innodb符号文件,TRN,TRG:与触发器相关的元数据文件)1.information_schema的性能问题。2.数据字典之间的不同步。在8.0之前,数据字典是处于一个“脑裂”的状态,这是因为innodb有自己的数据字典,server端也有自己的数据字典,这会导致某些元数据重复了,也会导致某些元数据的不一致,所以我们需要一个统一的数据字典。如图1。3.某些元数据不仅以上面提到的几种文件形式存放,还以MyISAM非事务型表存储,这使得数据字典没有统一的格式,难以统一管理。如下图1.图1:8.0版本之前的元数据存放方式4.不支持原子性DDL:一个原子性DDL操作应该是这样的:数据字典更新,存储引擎层的操作,在binlog中记录DDL操作。上面操作是原子性的,表示中间过程出现错误的时候,是可以完整回退的。这在8.0版本之前的DDL操作中是不支持的。因为数据库元信息存放于元信息文件中、非事务性表中以及特定存储引擎的数据字典中。这些都无法保证DDL操作内容在一个事务当中,无法保证原子性。5.崩溃恢复:由于DDL不是原子性的,有可能在DDL执行的中间阶段crash,恢复起来就有点困难,并会对复制造成一定的影响。6.缺乏可扩展性:显而易见,没有统一的数据字典,可扩展性明显低了很多。针对上面提及的这些点,mysql8.0版本推出了一个事务型数据字典来替代以前元数据各种存储方式。可以这么说,8.0的数据字典把上面这些问题都解决了。这就是8.0数据字典为什么改变的原因。reference:http://mysqlserverteam.com/mysql-8-0-data-dictionary-background-and-motivation/Mysql8.0数据字典系列一:为什么改变标签:问题特定bincode扩展性相关原因inf统一

如何使用servlet访问mysql数据库

import javax.servlet.ServletException; 2 import javax.servlet.http.HttpServlet; 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 public class ShowRs extends HttpServlet { 7 8 @Override 9 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {10 11 Connection conn = null;12 Statement stmt = null;13 ResultSet rs = null;14 15 resp.setContentType("text/html");16 resp.setCharacterEncoding("utf8");17 PrintWriter out = resp.getWriter();18 19 out.println("<table border=1>");20 out.println("<tr><td>Content:</td></tr>");21 22 try {23 Class.forName("com.mysql.jdbc.Driver");24 conn = DriverManager.getConnection("jdbc:mysql://localhost/spring?user=root&password=root");25 stmt = conn.createStatement();26 rs = stmt.executeQuery("select * from teams");27 while (rs.next()) {28 out.println("<tr>");29 out.println("<td>" + rs.getString("name") + "</td>");30 out.println("</tr>");31 }32 out.println("</table>");33 34 } catch (ClassNotFoundException e) {35 // TODO Auto-generated catch block36 e.printStackTrace();37 } catch (SQLException e) {38 // TODO Auto-generated catch block39 e.printStackTrace();40 }41 42 }43 44 }2. 配置web.xml文件,路径在/webapps/test/WEB-INF <servlet> <servlet-name>ShowRs</servlet-name> <servlet-class>ShowRs</servlet-class> </servlet> <servlet-mapping> <servlet-name>ShowRs</servlet-name> <url-pattern>/ShowRs</url-pattern> </servlet-mapping> 3.将mysql-connector-java-xxx.jar加入到/webapps/test/WEB-INF/lib4.打开网页进行测试,显示成功!4.1 数据库表teams原始内容4.2 通过servlet访问的name字段如何使用servlet访问mysql数据库标签:

dw php mysql记录集分页

111

Seaside (Mystic Mirror) 歌词

歌曲名:Seaside (Mystic Mirror)歌手:Lee Perry专辑:This Is Crucial Reggae: Lee "Scratch" PerrySeasideby The KooksDo you want to go to the seaside?I"m not trying to say that everybody wants to goI fell in love at the seasideI handled my charm with time and slight of handDo you want to go to the seaside?I"m not trying to say that everybody wants to goI fell in love at the seasideShe handled her charm with time and slight of hand, and ohBut I"m just trying to love youIn any kind of wayBut I find it hard to love you girlWhen you"re far awayAwayDo you want to go to the seaside?I"m not trying to say that everybody wants to goBut I fell in love on the seasideOn the seasideIn the seasidehttp://music.baidu.com/song/7386306

避免mysql注入应该避免有哪些特殊字符

你可以学习一下如何防止MYSQL被注入。一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。二、SQL注入攻击的总体思路1.寻找到SQL注入的位置2.判断服务器类型和后台数据库类型3.针对不通的服务器和数据库特点进行SQL注入攻击三、SQL注入攻击实例比如在一个登录界面,要求输入用户名和密码:可以这样输入实现免帐号登录:用户名: ‘or 1 = 1 –密 码:点登陆,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了.(当然现在的有些语言的数据库API已经处理了这些问题)这是为什么呢? 下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:String sql = "select * from user_table where username=" "+userName+" " and password=" "+password+" "";当输入了上面的用户名和密码,上面的SQL语句变成:SELECT * FROM user_table WHERE username=""or 1 = 1 -- and password=""分析SQL语句:条件后面username=”or 1=1 用户名等于 ” 或1=1 那么这个条件一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用,这样语句永远都能正确执行,用户轻易骗过系统,获取合法身份。这还是比较温柔的,如果是执行SELECT * FROM user_table WHEREusername="" ;DROP DATABASE (DB Name) --" and password=""….其后果可想而知…四、应对方法下面我针对JSP,说一下应对方法:1.(简单又有效的方法)PreparedStatement采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。使用好处:(1).代码的可读性和可维护性.(2).PreparedStatement尽最大可能提高性能.(3).最重要的一点是极大地提高了安全性.原理:sql注入只对sql语句的准备(编译)过程有破坏作用而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,而不再对sql语句进行解析,准备,因此也就避免了sql注入问题.2.使用正则表达式过滤传入的参数要引入的包:import java.util.regex.*;正则表达式:private String CHECKSQL = “^(.+)\sand\s(.+)|(.+)\sor(.+)\s$”;判断是否匹配:Pattern.matches(CHECKSQL,targerStr);下面是具体的正则表达式:检测SQL meta-characters的正则表达式 :/(\%27)|(")|(--)|(\%23)|(#)/ix修正检测SQL meta-characters的正则表达式 :/((\%3D)|(=))[^ ]*((\%27)|(")|(--)|(\%3B)|(:))/i典型的SQL 注入攻击的正则表达式 :/w*((\%27)|("))((\%6F)|o|(\%4F))((\%72)|r|(\%52))/ix检测SQL注入,UNION查询关键字的正则表达式 :/((\%27)|("))union/ix(\%27)|(")检测MS SQL Server SQL注入攻击的正则表达式:/exec(s|+)+(s|x)pw+/ix等等…..3.字符串过滤比较通用的一个方法:(||之间的参数可以根据自己程序的需要添加)public static boolean sql_inj(String str){String inj_str = ""|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";String inj_stra[] = split(inj_str,"|");for (int i=0 ; i < inj_stra.length ; i++ ){if (str.indexOf(inj_stra[i])>=0){return true;}}return false;}4.jsp中调用该函数检查是否包函非法字符防止SQL从URL注入:sql_inj.java代码:package sql_inj;import java.net.*;import java.io.*;import java.sql.*;import java.text.*;import java.lang.String;public class sql_inj{public static boolean sql_inj(String str){String inj_str = ""|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";//这里的东西还可以自己添加String[] inj_stra=inj_str.split("\|");for (int i=0 ; i < inj_stra.length ; i++ ){if (str.indexOf(inj_stra[i])>=0){return true;}}return false;}}5.JSP页面判断代码:使用javascript在客户端进行不安全字符屏蔽功能介绍:检查是否含有”‘”,”\”,”/”参数说明:要检查的字符串返回值:0:是1:不是函数名是function check(a){return 1;fibdn = new Array (”‘” ,”\”,”/”);i=fibdn.length;j=a.length;for (ii=0; ii<i; ii++){ for (jj=0; jj<j; jj++){ temp1=a.charAt(jj);temp2=fibdn[ii];if (tem"; p1==temp2){ return 0; }}}return 1;}===================================总的说来,防范一般的SQL注入只要在代码规范上下点功夫就可以了。凡涉及到执行的SQL中有变量时,用JDBC(或者其他数据持久层)提供的如:PreparedStatement就可以 ,切记不要用拼接字符串的方法就可以了。

mysql触发器怎么写

触发器是与 MySQL 数据表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。语法格式如下:CREATE <触发器名> < BEFORE | AFTER ><INSERT | UPDATE | DELETE >ON <表名> FOR EACH Row<触发器主体>语法说明如下。1) 触发器名触发器的名称,触发器在当前数据库中必须具有唯一的名称。如果要在某个特定数据库中创建,名称前面应该加上数据库的名称。2) INSERT | UPDATE | DELETE触发事件,用于指定激活触发器的语句的种类。注意:三种触发器的执行时间如下。INSERT:将新行插入表时激活触发器。例如,INSERT 的 BEFORE 触发器不仅能被 MySQL 的 INSERT 语句激活,也能被 LOAD DATA 语句激活。DELETE: 从表中删除某一行数据时激活触发器,例如 DELETE 和 REPLACE 语句。UPDATE:更改表中某一行数据时激活触发器,例如 UPDATE 语句。3) BEFORE | AFTERBEFORE 和 AFTER,触发器被触发的时刻,表示触发器是在激活它的语句之前或之后触发。若希望验证新数据是否满足条件,则使用 BEFORE 选项;若希望在激活触发器的语句执行之后完成几个或更多的改变,则通常使用 AFTER 选项。4) 表名与触发器相关联的表名,此表必须是永久性表,不能将触发器与临时表或视图关联起来。在该表上触发事件发生时才会激活触发器。同一个表不能拥有两个具有相同触发时刻和事件的触发器。例如,对于一张数据表,不能同时有两个 BEFORE UPDATE 触发器,但可以有一个 BEFORE UPDATE 触发器和一个 BEFORE INSERT 触发器,或一个 BEFORE UPDATE 触发器和一个 AFTER UPDATE 触发器。5) 触发器主体触发器动作主体,包含触发器激活时将要执行的 MySQL 语句。如果要执行多个语句,可使用 BEGIN?END 复合语句结构。6) FOR EACH ROW一般是指行级触发,对于受触发事件影响的每一行都要激活触发器的动作。例如,使用 INSERT 语句向某个表中插入多行数据时,触发器会对每一行数据的插入都执行相应的触发器动作。注意:每个表都支持 INSERT、UPDATE 和 DELETE 的 BEFORE 与 AFTER,因此每个表最多支持 6 个触发器。每个表的每个事件每次只允许有一个触发器。单一触发器不能与多个事件或多个表关联。另外,在 MySQL 中,若需要查看数据库中已有的触发器,则可以使用 SHOW TRIGGERS 语句。例子:BEGIN IF new.state in ("2","3") then INSERT INTO `userservice`.`ehome_us_green_examine` (modifydate,modifyuser,brancCode,stateDescription,state,userID,fromSystemkey,applydate,makeHospitalName,illnessName,userName,rightsholderName,tranno) VALUES ( sysdate(), "manage", old.brancCode, old.stateDescription, new.state, "", old.fromSystemkey, old.applydate,old.makeHospitalName,old.illnessName,old.userName,old.rightsholderName, old.tranno);END IF; END这个触发器比较简单,1、BEGIN到END,之间是对数据库的操作2、IF到END IF之间是判断,你想的对,就是如果。。的意思3、new.state in ("2","3") 这句的意思是:该表的字段state为(2或者3)的时候 4、执行下面的插入语句,new为新值,old是原来的值(如old.userName就是原来的这个字段的值)5、整个触发器翻译成白话就是,如果该表的state变成2或者3的时候,执行下面的插入语句备注:那么触发器是发生在状态变化之前还是之后呢?选Before或者After,顾名思义!

mysql如何快速查询

更多相关免费学习推荐:mysql教程(视频)mysql快速查询的方法:1.查询正在运行中的事务select p.id,p.user,p.host,p.db,p.command,p.time,i.trx_state,i.trx_started,p.info from information_schema.processlist p,information_schema.innodb_trx i where p.id=i.trx_mysql_thread_id;2.查看当前连接,并且能够知晓连接数select SUBSTRING_INDEX(host,‘:‘,1) as ip , count(*) from information_schema.processlist group by ip;3.查看一个表的大小select concat(round(sum(DATA_LENGTH/1024/1024),2),‘M‘) from information_schema.tables where table_schema=‘数据库名‘ AND table_name=‘表名‘;4.查看某个数据库所有表的大小select table_name,concat(round(sum(DATA_LENGTH/1024/1024),2),‘M‘) from information_schema.tables where table_schema=‘t1‘ group by table_name;5.查看库的大小,剩余空间的大小select table_schema,round((sum(data_length / 1024 / 1024) + sum(index_length / 1024 / 1024)),2) dbsize,round(sum(DATA_FREE / 1024 / 1024),2) freesize, round((sum(data_length / 1024 / 1024) + sum(index_length / 1024 / 1024)+sum(DATA_FREE / 1024 / 1024)),2) spsize from information_schema.tables where table_schema not in (‘mysql‘,‘information_schema‘,‘performance_schema‘) group by table_schema order by freesize desc;6.查找关于锁select r.trx_id waiting_trx_id,r.trx_mysql_thread_id waiting_thread,r.trx_query waiting_query,b.trx_id blocking_trx_id,b.trx_mysql_thread_id blocking_thread,b.trx_query blocking_query from information_schema.innodb_lock_waits w inner join information_schema.innodb_trx b on b.trx_id = w.blocking_trx_id inner join information_schema.innodb_trx r on r.trx_id = w.requesting_trx_idGinformation_schema的使用1.查看各个库下的表数据大小select table_name,concat(round(sum(DATA_LENGTH/1024/1024),2),‘M‘) from information_schema.tables where table_schema=‘db_name‘ group by table_name;2.查看各个数据库的数据大小select TABLE_SCHEMA, concat(round(sum(data_length)/1024/1024,2),‘ MB‘) as data_size from information_schema.tables group by table_schema;3.查看实例有没有主键select table_schema,table_name from information_schema.tables where (table_schema,table_name) not in(select distinct table_schema,table_name from information_schema.STATISTICS where INDEX_NAME=‘PRIMARY‘ ) and table_schema not in ( ‘sys‘,‘mysql‘,‘information_schema‘,‘performance_schema‘);4.查看实例中哪些字段可以为nullselect TABLE_SCHEMA,TABLE_NAME from COLUMNS where IS_NULLABLE=‘YES‘ and TABLE_SCHEMA not in (‘information_schema‘,‘performance_schema‘,‘mysql‘, ‘sys‘)G5.查看实例中有哪些存储过程和函数#存储过程select ROUTINE_SCHEMA,ROUTINE_NAME,ROUTINE_TYPEfrom information_schema.ROUTINESwhere ROUTINE_TYPE=‘PROCEDURE‘ and ROUTINE_SCHEMA not in (‘mysql‘,‘sys‘,‘information_schema‘,‘performance_schema‘);#函数select ROUTINE_SCHEMA,ROUTINE_NAME,ROUTINE_TYPE from information_schema.ROUTINES where ROUTINE_TYPE=‘FUNCTION‘ and ROUTINE_SCHEMA not in (‘mysql‘,‘sys‘,‘information_schema‘,‘performance_schema‘);6.查看实例中哪些表字段字符集和默认字符集不一致select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,CHARACTER_SET_NAME from information_schema.COLUMNS where (CHARACTER_SET_NAME is null or CHARACTER_SET_NAME <> ‘utf8‘) and TABLE_SCHEMA not in (‘information_schema‘,‘performance_schema‘,‘test‘,‘mysql‘,‘sys‘);7.查看实例中哪些表字段字符校验规则和默认的不一致查看当前字符集和校对规则设置show variables like ‘collation_%‘;select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,CHARACTER_SET_NAME,COLLATION_NAME from information_schema.COLUMNS where (COLLATION_NAME is null or COLLATION_NAME <> ‘utf8_general_ci‘) and TABLE_SCHEMA not in (‘information_schema‘,‘performance_schema‘,‘test‘,‘mysql‘,‘sys‘);8.查看哪些账号有除了select、update、insert以外的权限select GRANTEE,PRIVILEGE_TYPE,concat(TABLE_SCHEMA,‘-‘,TABLE_NAME,‘-‘,COLUMN_NAME) from COLUMN_PRIVILEGES where PRIVILEGE_TYPE not in (‘select‘,‘insert‘,‘update‘)union select GRANTEE,PRIVILEGE_TYPE,TABLE_SCHEMA from SCHEMA_PRIVILEGES where PRIVILEGE_TYPE not in (‘select‘,‘insert‘,‘update‘)unionselect GRANTEE,PRIVILEGE_TYPE,concat(TABLE_SCHEMA,‘-‘,TABLE_NAME) from TABLE_PRIVILEGES where PRIVILEGE_TYPE not in (‘select‘,‘insert‘,‘update‘) unionselect GRANTEE,PRIVILEGE_TYPE,concat(‘user‘) from USER_PRIVILEGES where PRIVILEGE_TYPE not in (‘select‘,‘insert‘,‘update‘);9.查看实例中哪些表不是默认存储引擎,以默认存储引擎为innodb为例select TABLE_NAME,ENGINE from information_schema.tables where ENGINE!=‘innodb‘ and TABLE_SCHEMA not in (‘information_schema‘,‘performance_schema‘,‘test‘,‘mysql‘, ‘sys‘);10.查看实例中哪些表有外键select a.TABLE_SCHEMA,a.TABLE_NAME,a.CONSTRAINT_TYPE,a.CONSTRAINT_NAME,b.REFERENCED_TABLE_NAME,b.REFERENCED_COLUMN_NAME from information_schema.TABLE_CONSTRAINTS a LEFT JOIN information_schema.KEY_COLUMN_USAGE b ON a.CONSTRAINT_NAME=b.CONSTRAINT_NAME where a.CONSTRAINT_TYPE=‘FOREIGN KEY‘;11.查看实例中哪些表字段有级联更新select TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,REFERENCED_TABLE_SCHEMA,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from information_schema.KEY_COLUMN_USAGE where REFERENCED_TABLE_SCHEMA is not null and REFERENCED_TABLE_NAME is not null and REFERENCED_COLUMN_NAME is not null and table_schema not in (‘information_schema‘,‘performance_schema‘,‘test‘,‘mysql‘, ‘sys‘);12.如何根据用户名、连接时间、执行的sql等过滤当前实例中的连接信息select USER,HOST,DB from processlist where TIME>2;13.查看数据库中没有索引的表select TABLE_SCHEMA,TABLE_NAME from information_schema.tables where TABLE_NAME not in (select distinct(any_value(TABLE_NAME)) from information_schema.STATISTICS group by INDEX_NAME) and TABLE_SCHEMA not in (‘sys‘,‘mysql‘,‘information_schema‘,‘performance_schema‘);14.查看数据库中有索引的表,建立了哪些索引显示结果:库名、表名、索引名select TABLE_SCHEMA,TABLE_NAME,group_concat(INDEX_NAME) from information_schema.STATISTICS where TABLE_SCHEMA not in (‘sys‘,‘mysql‘,‘information_schema‘,‘performance_schema‘) group by TABLE_NAME ;

mysql中如何查看数据库表的创建时间

第一步:mysql> USE information_schema;第二步:mysql> SELECT create_time FROM TABLES WHERE table_name = "Course";

MySQL中information_schema是什么_MySQL

bitsCN.com 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库。 information_schema数据库是做什么用的呢,使用WordPress博客的朋友可能会想,是不是安装模板添加的数据库呀?看完本片文章 后,你就会对information_schema数据库有所了解。information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。information_schema数据库表说明:SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。COLLATIONS表:提供了关于各字符集的对照信息。COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。KEY_COLUMN_USAGE表:描述了具有约束的键列。ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表 bitsCN.com

在MySQL中,用户可以通过查询information_schema数据库下的Routines表?

这个题是对的存储过程和函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和函数的信息,ROUTINE_NAME字段中存储的是存储过程和函数的名称;sp_name参数表示存储过程或函数的名称

Mac OS X 平台上有哪些好用且免费的MySQL客户端工具

推荐一个GUI工具,Sequel Pro或者直接使用phpmyadmin

「MySQL」这个词怎么读?

My S-Q-L,不专业的可以读作 my sequel(希扣),但绝非是 卖塞科儿其实很多老师并不知道他的读法,当时联系的数据库是dbase, foxbase, foxpro, access, MS SQL server (oracle), 15年前,mysql类似于幼儿园的游戏。此外,SQL server还被用于遵从SQL 92.99标准,在这方面mysql不太正式,因此您可以看到事务隔离级别。这样也很不错,mysql有很多非正式的,但更为方便的语法。具体可以看他的专业书。MySQL包含许多特性,特别是在MySQL 5.0和5.1中,添加了一些主要特性和特性。MySQL的特定功能或语句非常丰富。这就是为什么MySQL核心技术手册(版本2)是有价值的。“MySQL核心技术手册(第二版)”“需要让读者快速找到具体的细节,无论是SQL关键字还是MySQL命令行选项,特定的API信息或实用程序管理。《“MySQL核心技术手册(第二版)”“覆盖适用于所有命令和MySQL 5.1版本的编程信息,包括一些新特性和语言界面,对于大多数语句和函数,使用示例给出。MySQL核心技术手册(版本2)为MySQL语句、函数、配置选项和实用程序提供了完整的手册。为了帮助初学者入门,我们提供了一些教程。为PHP、Perl和C语言提供了应用程序编程接口(api)。在每个章节的API开头提供了一个简要的指南。新副本、触发器和存储过程部分。提供了一些MySQL的实际示例。一些有用的技巧可以帮助读者克服困难。

mysql英文怎么读

就是读 my S Q L 啊

几个不错的免费MySQL管理工具_MySQL

bitsCN.com MySQL以其简单易用,功能强大赢得了很多开发人员的喜爱,伴随Web 2.0浪潮,MySQL也正经历着前所未有的黄金时段,使用各种精心设计的工具来管理MySQL数据库要比单纯使用传统的方法轻松得的多,开发人员应该不断寻找那些能够缩短开发时间的工具。 但笔者一直在寻找一款满意的MySQL管理工具,并且要是开源或免费,因此诞生了本文,笔者为本文起名为:10个最好的免费MySQL管理工具,但是编者认为世上之物,没有最好,只有更好。不过笔者介绍的几款免费的MySQL管理工具还是很好的,希望这些工具能帮助开发人员和MySQL数据库维护人员简化工作,提高效率。 一、MySQL Workbench MySQL Workbench是一个由MySQL开发的跨平台、可视化数据库工具。它作为DBDesigner4工程的替代应用程序而备受瞩目。MySQL Workbench可以作为windows、linux和OS X系统上的原始GUI工具,它有各种不同的版本,你可以查看下面的链接以获得它的版本信息。 二、phpMyAdmin phpMyAdmin是一款免费的、用PHP编写的工具,用于在万维网上管理MySQL,它支持MySQL的大部分功能。这款含有用户界面的软件能够支持一些最常用的操作(比如管理数据库、表格、字段、联系、索引、用户、许可,等等),同时你还可以直接执行任何SQL语句。 它所具备的特性: >直观的Web界面 >支持大多数MySQL功能: > 浏览和丢弃数据库、表格、视图、字段和索引 >创建、复制、删除、重命名以及更改数据库、表格、字段和索引 >维护服务器、数据库以及表格,能对服务器的配置提出建议 >执行、编辑和标注任何SQL语句,甚至批量查询 >管理MySQL用户以及用户权限 >管理存储的过程(stored procedures)和触发器(triggers) >从CSV 和 SQL文件格式中导入数据 >能够以多种格式导出数据:CSV、SQL、XML、PDF、ISO/IEC 26300等 >管理多台服务器 >为数据库布局创建PDF图表 >使用Query-by-example (QBE)创建复杂的查询 >在数据库中进行全局搜索,或者在数据库的子集中进行搜索 >用预定义的函数把存储的数据转化成任何格式 >还具有其他更多特性... 三、Aqua Data Studio 对于数据库管理人员、软件开发人员以及业务分析师来说,Aqua Data Studio是一个完整的集成开发环境(IDE)。它主要具备了四个方面的功能:1)数据库查询和管理工具;2)一套数据库、源代码管理以及文件系统的比较工具;3)为Subversion(SVN)和CVS而设计了一个完整的集成源代码管理客户端;4)提供了一个的数据库建模工具(modeler),它和最好的独立数据库图表工具一样强大。 四、SQLyog SQLyog是一个全面的MySQL数据库管理工具(/u2018GUIu2019/"Frontendu2018)。 它的社区版(Community Edition)是具有GPL许可的免费开源软件。这款工具包含了开发人员在使用MySQL时所需的绝大部分功能:查询结果集合、查询分析器、服务器消息、表格数据、表格信息,以及查询历史,它们都以标签的形式显示在界面上,开发人员只要点击鼠标即可。此外,它还可以方便地创建视图和存储过程,最近几周笔者一直在反复使用这个功能。 五、MYSQL Front 这个MySQL数据库的图形GUI是一个“真正的”应用程序,它提供的用户界面比用PHP和HTML建立起来的系统更加精确。因为不会因为重载HTML网页而导致延时,所以它的响应是即时的。如果供应商允许的话,你可以让MySQL-Front直接与数据库进行工作。如果不行,你也只需要在发布网站上安装一个小的脚本即可。登录信息会存储在你的硬盘上,因此你不必再登录到不同的网络界面上了。 六、mytop mytop是一款基于控制台的工具(不是GUI),用于监视线程以及MySQL 3.22.x、3.23.x和4.x服务器的整体性能。它可以在大多数安装了Perl、DBI以及 Term::ReadKey的Unix系统上(包括Mac系统OS X)运行。如果你安装了Term::ANSIColor,你能得到彩色的视图。如果你安装了Time::HiRes,你还可以得到一个不错的 “每秒查询数” 实时统计。mytop0.7版甚至还能在windows上运行。 mytop的灵感来自系统监视工具“top”。我经常在Linux、FreeBSD和Solaris上使用top,你很可能会在mytop中注意到来自这些操作系统的某些特性。mytop连接到MySQL服务器之后,能定期运行SHOW PROCESSLIST和SHOW STATUS命令,并以一种有用的格式总结从这些命令中所获得的信息。 七、Sequel Pro Sequel Pro是一款管理MAC OSX数据库的应用程序,它可以让你直接访问本地以及远程服务器上的MySQL数据库,并且支持从流行的文件格式中导入和导出数据,其中包括SQL、CSV 和XML等文件。最初,Sequel Pro只是开源CocoaMySQL工程的一个分支。部分特性如下: >你很容易就可以建立起一个到Mac电脑本地MySQL服务器的连接 >它具有全部的表格管理功能,包括索引。 >支持MySQL视图 >它使用多窗口功能,能够立即支持多个数据库或表格 八、SQL Buddy SQL Buddy是一个强大的轻量级Ajax数据库管理工具。它非常易于安装,你只需要把文件夹解压到服务器里就行了,这再简单不过了!你还可以进行常见的绝大部分操作。这个工具还有许多有用的快捷键,你可以从这里查看:SQL Buddy Keyboard Shortcuts. 九、MySQL Sidu MySQL Sidu是一款免费的MySQL客户端,它通过网络浏览器来运行,非常容易上手!Sidu这几个字母表示Select(选择)、Insert(插入)、Delete(删除)和Update(更新)。Sidu其实还有更多的功能,它看起来更像MySQL前端软件的GUI而不是网页。 >SIDU支持SQL选择、插入、删除,更新功能。 >SIDU支持在浏览器上工作,如Firefox、IE、Opera、Safari、Chrome等等。 >SIDU看起来像MySQL前端软件的GUI而不是网页。 >SIDU可以跟MySQL、Postgres 和SQLite DBs一起工作。 十、Navicat Lite MySQL Admin Tool Navicat是一款快速、可靠的数据库管理工具,很受大家的欢迎。Navicat专门用来简化数据库管理并且减少管理成本,它旨在满足数据库管理人员、数据库开发人员以及广大中小企业的需要,它有一个很直观的GUI,可以让你安全便捷的创建、组织、访问以及分享信息。 对于MySQL来说,Navicat工具是一个强大的数据库管理和开发工具。它可以跟任何版本的MySQL数据库服务器(3.21版或者以上版本)一起工作,并且支持MySQL大多数最新的功能,包括Trigger、Stored Procedure、Function、Event, View和 Manage User等。Navicat Lite可以免费下载,但是仅适用于非商业活动。 bitsCN.com

sequel 什么连接不上mysql

1.在dos下运行mysql -u root -p 注意最好在mysql.exe所在目录下运行 mysql -u root -p 123456 show databases 列出所有数据库 看看mysql是不是真的运行起来了 2.用你的代码看看php是不是能连上正常运行的msyql 如果连不上,看php_mysql.dll 文件不没有 undefined function mysql_pconnect() 是说没有这个函数, 这是php_mysql.dll 里提供的函数 php5好像是用php_mysqli.dll extension=php_mysqli.dll 然后是那么你的mysql版本是?如果是3.x,那么将该目录下的my-example复制到c盘根目录下,并重命名为my如果是4.x,将该目录下的my-*(指任意一个)复制到c盘根目录下,并重新命名然后编辑这个文件,修改相关的路径

如何在sequel导出mysql数据库的数据库

oracle exp命令批量导出数据库的方法:1 假如数据库名为:TEST 、,用户名system 密码manager 导出到D:/daochu.dmp中 exp system/manager@TEST file=d:/daochu.dmp full=y如果要导出指定的表,方法如下:假如要导出数据库中的表"CHA%"导出exp aichannel/aichannel@TESTDB2 file= d:/data/newsmgnt.dmp owner=(PRO) tables=(PRO.CHA%

mysql 脏页和redo log 的区别

首先说一下什么叫脏页,就是内存中的数据对应硬盘的数据有所改变.改变后的数据页就叫做脏页.它形成的前后关系以及讲解可以看:上面的博文比较学院化,老子不喜欢,但是讲的很好.我要用我自己的语言重新解释.这个世界是不安全的,盗取无处不在.有一家图书馆,每天都有借出去的书,也有还回来的书,书架上都有标签,还书后还要放回原标签处.某天小姐来借书,借走了"男性生理结构这本书".那么这个书所在的位置就空出来了.这种需要被放回去的书我们称之为脏页.小姐研读完毕,回到图书馆说,我看完了,退书.但是她并不是在哪里拿,在哪里退,而是送回给图书管理员.图书管理员将被还回来的书放到了一个安全的所在,一排排的整理好.最后,等到一天结束或者书量巨大,就将抽出时间将这些书整批整批的放回远处.redo log 和 刷脏页大致的流程就是如此,书就是数据页,被借出的书就是脏页,将来要被放回的.redo 日志就是暂时存放要被放回的书的地方,因为这样会比较快,如果还回一本书放回去一本,就会导致很多的随机写入,而且写入次数十分大.redo log 大小:innodb_log_file_size*innodb_log_files_in_group脏页大小:current LSN - check point LSN脏页最大量:innodb_max_dirty_pages_pct (计算方法:脏页大小/redo log 大小)就是这样,将来还会继续更新与redo log 和脏页之间的现象.

为什么要多个mysql redo log file

用于日志满了切换之用或互相备份之用

一文详解-MySQL 事务和锁

当多个用户访问同一份数据时,一个用户在更改数据的过程中,可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另外一个一致性状态,使用事务处理是非常必要的,事务具有以下四个特性: MySQL 提供了多种事务型存储引擎,如 InnoDB 和 BDB 等,而 MyISAM 不支持事务。为了支持事务,InnoDB 存储引擎引入了与事务处理相关的 REDO 日志和 UNDO 日志,同时事务依赖于 MySQL 提供的锁机制 事务执行时需要将执行的事务日志写入日志文件,对应的文件为 REDO 日志。当每条 SQL 进行数据更新操作时,首先将 REDO 日志写进日志缓冲区。当客户端执行 COMMIT 命令提交时,日志缓冲区的内容将被刷新到磁盘,日志缓冲区的刷新方式或者时间间隔可以通过参数 innodb_flush_log_at_trx_commit 控制 REDO 日志对应磁盘上的 ib_logifleN 文件,该文件默认为 5MB,建议设置为 512MB,以便容纳较大的事务。MySQL 崩溃恢复时会重新执行 REDO 日志的记录,恢复最新数据,保证已提交事务的持久性 与 REDO 日志相反,UNDO 日志主要用于事务异常时的数据回滚,具体内容就是记录数据被修改前的信息到 UNDO 缓冲区,然后在合适的时间将内容刷新到磁盘 假如由于系统错误或者 rollback 操作而导致事务回滚,可以根据 undo 日志回滚到没修改前的状态,保证未提交事务的原子性 与 REDO 日志不同的是,磁盘上不存在单独的 UNDO 日志文件,所有的 UNDO 日志均存在表空间对应的 .ibd 数据文件中,即使 MySQL 服务启动了独立表空间 在 MySQL 中,可以使用 BEGIN 开始事务,使用 COMMIT 结束事务,中间可以使用 ROLLBACK 回滚事务。MySQL 通过 SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK 等语句支持本地事务 MySQL 定义了四种隔离级别,指定事务中哪些数据改变其他事务可见、哪些数据该表其他事务不可见。低级别的隔离级别可以支持更高的并发处理,同时占用的系统资源更少 InnoDB 系统级事务隔离级别可以使用以下语句设置: 查看系统级事务隔离级别: InnoDB 会话级事务隔离级别可以使用以下语句设置: 查看会话级事务隔离级别: 在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据称为脏读(Dirty Read),即是:首先开启 A 和 B 两个事务,在 B 事务更新但未提交之前,A 事务读取到了更新后的数据,但由于 B 事务回滚,导致 A 事务出现了脏读现象 所有事务只能看见已经提交事务所做的改变,此级别可以解决脏读,但也会导致不可重复读(Nonrepeatable Read):首先开启 A 和 B 两个事务,A事务读取了 B 事务的数据,在 B 事务更新并提交后,A 事务又读取到了更新后的数据,此时就出现了同一 A 事务中的查询出现了不同的查询结果 MySQL 默认的事务隔离级别,能确保同一事务的多个实例在并发读取数据时看到同样的数据行,理论上会导致一个问题,幻读(Phontom Read)。例如,第一个事务对一个表中的数据做了修改,这种修改会涉及表中的全部数据行,同时第二个事务也修改这个表中的数据,这次的修改是向表中插入一行新数据,此时就会发生操作第一个事务的用户发现表中还有没有修改的数据行 InnoDB 通过多版本并发控制机制(MVCC)解决了该问题:InnoDB 通过为每个数据行增加两个隐含值的方式来实现,这两个隐含值记录了行的创建时间、过期时间以及每一行存储时间发生时的系统版本号,每个查询根据事务的版本号来查询结果 通过强制事务排序,使其不可能相互冲突,从而解决幻读问题。简而言之,就是在每个读的数据行上加上共享锁实现,这个级别会导致大量的超时现象和锁竞争,一般不推荐使用 为了解决数据库并发控制问题,如走到同一时刻客户端对同一张表做更新或者查询操作,需要对并发操作进行控制,因此产生了锁 共享锁的粒度是行或者元组(多个行),一个事务获取了共享锁以后,可以对锁定范围内的数据执行读操作 排他锁的粒度与共享锁相同,一个事务获取排他锁以后,可以对锁定范围内的数据执行写操作 有两个事务 A 和 B,如果事务 A 获取了一个元组的共享锁,事务 B 还可以立即获取这个元组的共享锁,但不能获取这个元组的排他锁,必须等到事务 A 释放共享锁之后。如果事务 A 获取了一个元组的排他锁,事务 B 不能立即获取这个元组的共享锁,也不能立即获取这个元组的排他锁,必须等到 A 释放排他锁之后 意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁和意向排他锁。意向共享锁表示一个事务有意对数据上共享锁或者排他锁。有意表示事务想执行操作但还没真正执行 锁的粒度主要分为表锁和行锁 表锁的开销最小,同时允许的并发量也是最小。MyISAM 存储引擎使用该锁机制。当要写入数据时,整个表记录被锁,此时其他读/写动作一律等待。一些特定的动作,如 ALTER TABLE 执行时使用的也是表锁 行锁可以支持最大的并发,InnoDB 存储引擎使用该锁机制。如果要支持并发读/写,建议采用 InnoDB 存储引擎

如何从MySQL/InnoDB数据文件中的恢复数据

- 恢复策略前面说到未提交的事务和回滚了的事务也会记录Redo Log,因此在进行恢复时,这些事务要进行特殊的的处理.有2中不同的恢复策略: A. 进行恢复时,只重做已经提交了的事务。B. 进行恢复时,重做所有事务包括未提交的事务和回滚了的事务。然后通过Undo Log回滚那些未提交的事务。- InnoDB存储引擎的恢复机制MySQL数据库InnoDB存储引擎使用了B策略, InnoDB存储引擎中的恢复机制有几个特点: A. 在重做Redo Log时,并不关心事务性。 恢复时,没有BEGIN,也没有COMMIT,ROLLBACK的行为。也不关心每个日志是哪个事务的。尽管事务ID等事务相关的内容会记入Redo Log,这些内容只是被当作要操作的数据的一部分。B. 使用B策略就必须要将Undo Log持久化,而且必须要在写Redo Log之前将对应的Undo Log写入磁盘。Undo和Redo Log的这种关联,使得持久化变得复杂起来。为了降低复杂度,InnoDB将Undo Log看作数据,因此记录Undo Log的操作也会记录到redo log中。这样undo log就可以像数据一样缓存起来,而不用再redo log之前写入磁盘了。包含Undo Log操作的Redo Log,看起来是这样的:记录1: <trx1, Undo log insert <undo_insert …>>记录2: <trx1, insert …>记录3: <trx2, Undo log insert <undo_update …>>记录4: <trx2, update …>记录5: <trx3, Undo log insert <undo_delete …>>记录6: <trx3, delete …>C. 到这里,还有一个问题没有弄清楚。既然Redo没有事务性,那岂不是会重新执行被回滚了的事务?确实是这样。同时Innodb也会将事务回滚时的操作也记录到redo log中。回滚操作本质上也是对数据进行修改,因此回滚时对数据的操作也会记录到Redo Log中。一个回滚了的事务的Redo Log,看起来是这样的:记录1: <trx1, Undo log insert <undo_insert …>>记录2: <trx1, insert A…>记录3: <trx1, Undo log insert <undo_update …>>记录4: <trx1, update B…>记录5: <trx1, Undo log insert <undo_delete …>>记录6: <trx1, delete C…>记录7: <trx1, insert C>记录8: <trx1, update B to old value>记录9: <trx1, delete A>一个被回滚了的事务在恢复时的操作就是先redo再undo,因此不会破坏数据的一致性.- InnoDB存储引擎中相关的函数Redo: recv_recovery_from_checkpoint_start()Undo: recv_recovery_rollback_active()Undo Log的Redo Log: trx_undof_page_add_undo_rec_log()

MySQL备份的几种常用

1.mysqldump在日常工作中,我们会使用mysqldump命令创建sql格式的转储文件来备份数据库。或者我们把数据导出后做数据迁移,主备搭建等操作。mysqldump是一个逻辑备份工具,复制原始的数据库对象定义和表数据产生一组可执行的SQL语句。 默认情况下,生成insert语句,也能生成其它分隔符的输出或XML格式的文件。shell> mysqldump [arguments] > file_name我们简单的来看一下日常的用法:备份所有的数据库:shell> mysqldump --all-databases > dump.sql (不包含INFORMATION_SCHEMA,performance_schema,sys,如果想要导出的话还要结合--skip-lock-tables和--database一起用)备份指定的数据库:shell> mysqldump --databases db1 db2 db3 > dump.sql当我们只备份一个数据的时候可以省去 --databases 直接写成:mysqldump test > dump.sql 不过有一些细微的差别,如果不加的话,数据库转储输出不包含创建数据库和use语句,所以可以不加这个参数直接导入到其它名字的数据库里当然我们也可以只备份某个表 :mysqldump --user [username] --password=[password] [database name] [table name] table_name.sql了解了简单的一些用法后我们再着重的看一下几个参数:--master-data 获取备份数据的Binlog位置和Binlog文件名,用于通过备份恢复的实例之间建立复制关系时使用,该参数会默认开启。--dump-slave 用于在slave上dump数据,建立新的slave。因为我们在使用mysqldump时会锁表,所以大多数情况下,我们的导出操作一般会在只读备库上做,为了获取主库的Relay_Master_Log_File和Exec_Master_Log_Pos,需要用到这个参数,不过这个参数只有在5.7以后的才会有–no-data, -d 不导出任何数据,只导出数据库表结构刚刚我们说过在使用mysqldump的时候会锁表,我们来详细的看一下它的锁机制。我们开两个窗口,在第一个里面执行mysqldump -uroot -pxxxxx --master-data=2 --databases dbname > /tmp/dbnamedate +%F.sql然后第二个窗口登陆进去,使用show process的命令可以看到目前dump的session正在执行 1.pngSELECT /*!40001 SQL_NO_CACHE */ * FROM table_name; 可以看到这条sql正在以no_cache的模式查询数据。然后我们在同样的表上执行一下select,发现被阻塞了。光标一直不返回。2.png一般遇到这种文件,我们会想是不是有锁呢?为了验证我们查看一下锁的信息,可以发现dump的进程实际上是加了锁的。3.png我们把具体的general_log打开,然后看一下当时的操作:4.png4101044 Query FLUSH /*!40101 LOCAL */ TABLES4101044 Query FLUSH TABLES WITH READ LOCK (关闭所有打开的表,同时对于所有数据库中的表都加一个读锁,直到显示地执行unlock tables,该操作常常用于数据备份的时候。)4101044 Query SHOW MASTER STATUS(这是因为我用了--master-data=2)所以这个时候表就会被锁住。如果我不加--master-data参数(mysqldump -uroot -pxx --databases db > /tmp/dbnamedate +%F.sql) mysql会显示的对每一张要备份的表执行LOCK TABLES table_name1 READ,LOCK TABLES table_name2 READ并且也不会有读的阻塞。那有没有不锁的方法,其实也是有的,就是使用--single-transaction把备份的操作放在一个事务里去进行带上--single-transaction参数的mysqldump备份过程:如果是5.6版本的mysql

如何从MySQL/InnoDB数据文件中的恢复数据

- 恢复策略前面说到未提交的事务和回滚了的事务也会记录Redo Log,因此在进行恢复时,这些事务要进行特殊的的处理.有2中不同的恢复策略: A. 进行恢复时,只重做已经提交了的事务。B. 进行恢复时,重做所有事务包括未提交的事务和回滚了的事务。然后通过Undo Log回滚那些未提交的事务。- InnoDB存储引擎的恢复机制MySQL数据库InnoDB存储引擎使用了B策略, InnoDB存储引擎中的恢复机制有几个特点: A. 在重做Redo Log时,并不关心事务性。 恢复时,没有BEGIN,也没有COMMIT,ROLLBACK的行为。也不关心每个日志是哪个事务的。尽管事务ID等事务相关的内容会记入Redo Log,这些内容只是被当作要操作的数据的一部分。B. 使用B策略就必须要将Undo Log持久化,而且必须要在写Redo Log之前将对应的Undo Log写入磁盘。Undo和Redo Log的这种关联,使得持久化变得复杂起来。为了降低复杂度,InnoDB将Undo Log看作数据,因此记录Undo Log的操作也会记录到redo log中。这样undo log就可以像数据一样缓存起来,而不用再redo log之前写入磁盘了。包含Undo Log操作的Redo Log,看起来是这样的:记录1: <trx1, Undo log insert <undo_insert …>>记录2: <trx1, insert …>记录3: <trx2, Undo log insert <undo_update …>>记录4: <trx2, update …>记录5: <trx3, Undo log insert <undo_delete …>>记录6: <trx3, delete …>C. 到这里,还有一个问题没有弄清楚。既然Redo没有事务性,那岂不是会重新执行被回滚了的事务?确实是这样。同时Innodb也会将事务回滚时的操作也记录到redo log中。回滚操作本质上也是对数据进行修改,因此回滚时对数据的操作也会记录到Redo Log中。一个回滚了的事务的Redo Log,看起来是这样的:记录1: <trx1, Undo log insert <undo_insert …>>记录2: <trx1, insert A…>记录3: <trx1, Undo log insert <undo_update …>>记录4: <trx1, update B…>记录5: <trx1, Undo log insert <undo_delete …>>记录6: <trx1, delete C…>记录7: <trx1, insert C>记录8: <trx1, update B to old value>记录9: <trx1, delete A>一个被回滚了的事务在恢复时的操作就是先redo再undo,因此不会破坏数据的一致性.- InnoDB存储引擎中相关的函数Redo: recv_recovery_from_checkpoint_start()Undo: recv_recovery_rollback_active()Undo Log的Redo Log: trx_undof_page_add_undo_rec_log()

mysql的redolog文件夹可以删除吗

1.首先在windows服务中将mysql服务删掉,使用命令 sc delete mysql2.在控制面板中卸载掉mysql。3.清理mysql安装目录的ini文件。4.清理注册表:HKEY_LOCAL_MACHINESYSTEMControlSet001ServicesEventlogApplicationMySQL 目录删除HKEY_LOCAL_MACHINESYSTEMControlSet002ServicesEventlogApplicationMySQL 目录删除HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesEventlogApplicationMySQL 目录删除(我卸载的时候没有找到,略过后仍达到完全卸载的目的。)5.有一些mysql的数据文件也必须删除干净,比如说:C:Documents and SettingsAll UsersApplication DataMySQL6.重启电脑。重新安装即可。

mysql如何保证redolog和binlog的一致性,安全性,效率。

* 回复内容中包含的链接未经审核,可能存在风险,暂不予完整展示!mysql如何保证redolog和binlog的一致性,安全性,效率。和数据安转相关的参数sync_binlog:控制binlog的刷新方式(写入到磁盘)innodb_flush_log_at_trx_commit:在innodb下控制着redo的写入方式innodb_support_xa:外部事务,用来保证binlog和redo一致性的,俗称两段式提交binlog_order_commits:按照binlog的写入顺序提交事务,保证redo和binlog的已执行binlog_max_flush_queue_time: leader线程搜集binlog的超时时间2pc提交(官方支持)(redo日志在prepare阶段就已经sync),绝大部分都比较支持这种说法http://dev.m***.com/doc/refman/5.6/en/binary-log.htmlhttp://blog.i***.net/15480802/viewspace-1411356http://www.l******.com/Linux/2015-11/124942.htmhttp://www.2**.com/database/201306/221413.html2pc流程:(sync_binlog = 1,innodb_flush_log_at_trx_commit = 1 )1.prepare阶段:sync redo 日志(未sync的redo存放于innodb_log_buffer_size中),系统自动完成获取prepare_commit_mutex(一个全局锁,一次只能被一个事务获取)2.生成binlog,将binlog写入文件系统(未提交之前binlog存放在binlog_cache_size中),sync binlog,这一步受sync_binlog控制3.提交commit 将commit标志sync ,释放prepare_commit_mutex(这一步应该受innodb_flush_log_at_trx_commit的控制)违背了这个参数的定义:innodb_flush_log_at_trx_commit观点二:redo日志在最后的commit的时候才synchttp://blog.i***.net/28218939/viewspace-19758092pc流程:(官方没有明显的支持这种说法)1.prepare阶段:获取prepare_commit_mutex2.生成binlog,将binlog写入文件系统(未提交之前binlog存放在binlog_cache_size中),sync binlog3.提交commit 将redo log sync ,释放prepare_commit_mutex这种方式会造成binlog的日志记录多余redo日志记录,在恢复的时候是如何恢复? 难道是以binlog为准,不管这个事务的redo有没有提交 ,只要写binlog就认为该事务以提交(现阶段还没有找到有关该说法).innodb数据恢复流程1.查找未提交的redo日志(找xid)2.用xid去binlog查找对应的日志记录3.如果有就认为这个事务是提交的,并补充commit。如果没有就认为是没有提交的,在恢复的时候就rollback事务###################################################################################################以上2pc日志写入方式是在 mysql5.6之前的方式,当sync_binlog=1的时候 系统的性能非常糟糕。从5.6 之后就开始采用BLGC方式写2pc日志,来提升性能BLGC具体流程如下:(每一个阶段只有一个活跃的线程)flush stage:搜集多个线程产生的binlog,依次放入flush队列的末尾,sync stage:flush队列超时(binlog_max_flush_queue_time)或者没有线程产生binlog了 ,flush队列开始sync队列,将binlog写入磁盘(合并io) commit stage:队列进入提交阶段(这里只做提交操作,redo日志的写入已经在prepare写入)个人理解:flush stage:队列中的第一个线程为leader线程,后面的线程为follower线程,leader线程主要负责收集待提交binlog的线程,并且放入flush 队列的末尾,直到没有找到需要提交binog的线程,或者超时(binlog_max_flush_queue_time),才进入sync stagesync stage:如果flush stage队列为空,则之前leader线程依然为leader线程,负责binlog的sync,否则变成follower线程(合并执行sync)commit stage:sync完binlog的线程被放入commit队列的末尾,等待提交5.7 的组提交:Step1. InnoDB Prepare,记录当前的LSN到thd中。Step2. 进入 Group Commit 的flush stage;Leader搜集队列,同时算出队列中最大的LSN。Step3. 将InnoDB的redo log write/fsync到指定的LSN Step4. 写Binlog并进行随后的工作(sync Binlog, InnoDB commit也就是将 redo log的write/sync延迟到了 binlog group commit的 flush stage 之后,sync binlog之前。通过延迟写redo log的方式,显式的为redo log做了一次组写入(redo log group write),并减少了(redo log) log_sys->mutex的竞争。组提交http://www.t*****.com/articles/rEZr2qhttp://m********.com/?p=581http://www.c**.net/article/2015-01-16/2823591(淘宝内部mysql交流)innodb数据丢失的问题:http://www.3****.com/content/14/1019/00/12904276_418041635.shtml组提交的理解:http://www.b****.com/pdb/mysql/201407/226226.html本文出自 “SQLServer MySQL” 博客,请务必保留此出处http://dwchaoyue.blog.5***.com/2826417/1784509mysql如何保证redolog和binlog的一致性,安全性,效率。标签:mysql 原理

mysql与es查询数据速度原理比较

财务平台亿级数据量毫秒级查询优化之elasticsearch原理解析_wang123459的博客-CSDN博客_elasticsearch 查询优化 mysql底层B-tree 支持矮胖,高胖的时候就很难受,说白了就是数据量多会增加IO操作。 ES底层倒排索引。term index不需要存下所有的term,而仅仅是他们的一些前缀与Term Dictionary的block之间的映射关系,再结合FST(Finite StateTransducers)的压缩技术,可以使term index缓存到内存中 (有点二级索引的感觉)

数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库

今天有客户的数据库意外被删除了整个目录中的数据文件,操作系统级别的删除,然而幸运的是这个数据库没有崩溃,仍然处于 open 状态的时候,客户就发现了问题,求助到我们,最终完整地恢复了所有数据文件。 在 Linux 下大致重新演示一下恢复的过程,恢复的步骤与数据库版本没有太大关系,与操作系统的不同会有所不同。 1. 在数据库 open 的时候,直接删除 users 表空间中的数据文件。2. 尝试在 users 表空间中创建表,开始报错。 在告警日志中,同样也可以看到类似信息。3. 检查 dbwr 的进程 PID4. dbwr 会打开所有数据文件的句柄。在 proc 目录中可以查到,目录名是进程 PID,fd 表示文件描述符。注意其中“/app/oracle/oradata/ORCL/datafile/o1_mf_users_555wrj4o_.dbf (deleted)”字样,表示该文件已经被删除,如果是 Solaris 操作系统,ls 命令不会有如此清晰的显示,为了在 Solaris 系统中确认哪个句柄对应哪个文件,则需要使用 lsof 程序。 5. 直接 cp 该句柄文件名回原位置。6. 进行数据文件 recover完成数据文件恢复。 恢复的原理是,在 Linux 操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从 /proc 目录中获得。但是要注意的是,此时如果关闭数据库,则此句柄会消失,那么除了扫描磁盘进行文件恢复之外就没有其它方法了,因此在数据库出现问题的时候,如果不确认情况的复杂程度,千万不要随便关闭数据库。重启数据库往往是没有意义的,甚至是致命的。 当然,客户的操作系统是Solaris,并且客户删除的文件还包括 current online redo log,因此还有其它更复杂的操作,不在这里描述。数据恢复:如何恢复Linux中意外删除的Oracle和MySQL数据库标签:tleimage描述符displaycurrent.com情况mysql数据库height

MySQL账户相关

1.mysql用户创建:shell mysql --user=root mysqlmysql GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY "something" WITH GRANT OPTION;mysql GRANT ALL PRIVILEGES ON *.* TO monty@"%" IDENTIFIED BY "something" WITH GRANT OPTION;mysql GRANT RELOAD,PROCESS ON *.* TO admin@localhost;mysql GRANT USAGE ON *.* TO dummy@localhost;这些GRANT语句安装3个新用户:monty可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令"something"做这个。注意,我们必须对monty@localhost和monty@"%"发出GRANT语句。如果我们增加localhost条目,对localhost的匿名用户条目在我们从本地主机连接接时由mysql_install_db创建的条目将优先考虑,因为它有更特定的Host字段值,所以以user表排列顺序看更早到来。admin可以从localhost没有一个口令进行连接并且被授予reload和process管理权限的用户。这允许用户执行mysqladmin reload、mysqladmin refresh和mysqladmin flush-*命令,还有mysqladmin processlist。没有授予数据库有关的权限。他们能在以后通过发出另一个GRANT语句授权。dummy可以不用一个口令连接的一个用户,但是只能从本地主机。全局权限被设置为"N"--USAGE权限类型允许你无需权限就可设置一个用户。它假定你将在以后授予数据库相关的权限。2.通过直接修改授权表设置用户权限,运行这些命令(注意,在结束时FLUSH PRIVILEGES):shell mysql --user=root mysqlmysql INSERT INTO user (Host,User,Password) VALUES("localhost","custom",PASSWORD("stupid"));mysql INSERT INTO user (Host,User,Password) VALUES("server.domain","custom",PASSWORD("stupid"));mysql INSERT INTO user (Host,User,Password) VALUES("","custom",PASSWORD("stupid"));mysql INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv)VALUES ("localhost","bankaccount","custom","Y","Y","Y","Y","Y","Y");mysql INSERT INTO db(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv)VALUES ("","expenses","custom","Y","Y","Y","Y","Y","Y");mysql INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv)VALUES("%","customer","custom","Y","Y","Y","Y","Y","Y");mysql FLUSH PRIVILEGES;3.改动密码时有时候会遇到忘记先前的密码,这时可以采用以下方式:修改你的my.ini 配置文件,在里面的 [mysqld]节中某处加入下面的一行skip-grant-tables然后保存,重启 mysqld 服务,这样你可以使用任何用户名以超级管理员的身体登录 MySQL 服务了。然后转到mysql数据库中修改user表:update user set password=PASSword("1234") where user="root";一定记住要用password函数,否则将来将要输入的密码是‘1234"的密文。最后删除上面所添中的内容,重启服务。另外,如果可以从本机或其它机器上找到可以正常使用的MySql数据库,那么也可拷贝其mysql库中的文件名为user的相关文件,覆盖忘记密码的数据库中的同名文件,这样也能以被拷贝者的账户密码登录。4.如何设置MySql账户使其可以从远程访问服务器在5.0版本中,其实有一个图形界面的配置向导工具,在设置root账户密码时,可以选择是否允许其从远程访问。默认情况下是不允许的。在命令行下,可以有两种大同小异的方法来作此设置:(1)mysqlGRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "something" WITH GRANT OPTION;mysqlGRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "something" WITH GRANT OPTION;第一句增加了一个root用户授权通过本地机(localhost)访问,密码“something”。第二句则是使用通配符,授与root用户从任何其它主机发起的访问。(2)亦可直接使用update语句修改user表:使用root用户或其他用户登录mysql,转到mysql数据库update user set host="localhost" where user="root";flush privileges;//只允许root在本机登录update user set host="%" where user="root";flush privileges;//允许root远程访问注意,以上一定要加flush语句。另外,如果要建新用户,则用grant语句比较方便,记住语句grant总是创建新用户。5.关于MySql的3306端口一次在服务器上新装5.0.18时,提示3306端口已被占用,强制使用该端口,则发现所连接上的数据库是4.1.8版本,始终无法访问到新创建的服务器。后来发现机器上原来装有一个mysql服务器,4.1.8版本。此时,应重新配置新版本的数据库, 将端口设为其他的,如3307,那么在访问时,可以通过加上选项:--port=3307来访问,在.net程序中也须将连接字符串添上port=3307,即可。

mac上的mysql的secure_file_priv怎么设置。

安装完mysql-server会提示可以运行mysql_secure_installation。运行mysql_secure_installation会执行几个设置:a)为root用户设置密码b)删除匿名账号c)取消root用户远程登录d)删除test库和对test库的访问权限e)刷新授权表使修改生效通过这几项的设置能够提高mysql库的安全。建议生产环境中mysql安装这完成后一定要运行一次mysql_secure_installation,详细步骤请参看下面的命令:复制代码代码如下:[root@server1~]#mysql_secure_installationNOTE:RUNNINGALLPARTSOFTHISSCRIPTISRECOMMENDEDFORALLMySQLSERVERSINPRODUCTIONUSE!PLEASEREADEACHSTEPCAREFULLY!InordertologintoMySQLtosecureit,we"llneedthecurrentpasswordfortherootuser.Ifyou"vejustinstalledMySQL,andyouhaven"tsettherootpasswordyet,thepasswordwillbeblank,soyoushouldjustpressenterhere.Entercurrentpasswordforroot(enterfornone):<–初次运行直接回车OK,successfullyusedpassword,movingon…SettingtherootpasswordensuresthatnobodycanlogintotheMySQLrootuserwithouttheproperauthorisation.Setrootpassword?[Y/n]<–是否设置root用户密码,输入y并回车或直接回车Newpassword:<–设置root用户的密码Re-enternewpassword:<–再输入一次你设置的密码Passwordupdatedsuccessfully!Reloadingprivilegetables..…Success!Bydefault,aMySQLinstallationhasananonymoususer,allowinganyonetologintoMySQLwithouthavingtohaveauseraccountcreatedforthem.Thisisintendedonlyfortesting,andtomaketheinstallationgoabitsmoother.Youshouldremovethembeforemovingintoaproductionenvironment.Removeanonymoususers?[Y/n]<–是否删除匿名用户,生产环境建议删除,所以直接回车…Success!Normally,rootshouldonlybeallowedtoconnectfrom"localhost".Thisensuresthatsomeonecannotguessattherootpasswordfromthenetwork.Disallowrootloginremotely?[Y/n]<–是否禁止root远程登录,根据自己的需求选择Y/n并回车,建议禁止…Success!Bydefault,MySQLcomeswithadatabasenamed"test"thatanyonecanaccess.Thisisalsointendedonlyfortesting,andshouldberemovedbeforemovingintoaproductionenvironment.Removetestdatabaseandaccesstoit?[Y/n]<–是否删除test数据库,直接回车-Droppingtestdatabase……Success!

MySQL的权限有哪些

Select_privInsert_privUpdate_privDelete_privCreate_privDrop_privReload_privShutdown_privProcess_privFile_privGrant_privReferences_privIndex_privAlter_priv

mysql --secure-file-priv问题解决方案

The MySQL server is running with the –secure-file-priv option so it cannot execute this statement. 在我们安装完 MySQL 之后,会自动生成一个名为my.ini的配置文件,该文件记录了 MySQL 的所有默认配置,如端口号、默认字符集、默认存储引擎等等。而这个配置文件,则位于隐藏文件夹ProgramData中 我们也可以通过命令查看secure-file-priv的当前值: show variables like "%secure%"; 查询显示: ecure-file-priv="C:/ProgramData/MySQL/MySQL Server 5.7/Uploads" 我们可以通过打开my.ini配置文件进行查看及修改: 如上图所示,我注释了 MySQL 的默认值,并修改成自己指定的路径。在我修改此配置文件的内容之后,例如修改了secure-file-priv的默认值,要想使其生效,必须关闭 MySQL 然后重新启动。需要我们注意的是:关闭 MySQL 并不是指简单的用exit命令退出 MySQL 或者关闭 MySQL 窗口,而是关闭 MySQL 服务,然后重新启动服务。

mysql权限中的priv是哪个单词的缩写??

privilege

关于oracle数据库的分页查询rownum转换成mysql分页查询的问题

select * from (select ROWNUM r,t.* from student t 修改为 select * from student )student <![CDATA[ where r > #current# and r <=#next# order by id修改为 <![CDATA[ order by idLIMIT #current# , 每页多少行注1: LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1) 也就是如果你是 每页 20 行的话。 就直接 LIMIT #current# , 20 吧注2: 因为那个 第一个 初始记录行的偏移量是 0(而不是 1) 而我又不能LIMIT #current# - 1, 20 因此你外部程序, 传参数的时候, 要自己 - 1 了, 再传进来。

mysql里不识别rownum吗 如下orcal里的代码 怎么改成mysql里的形式?

select *from( select *from(select * from empwhere sal is not nullorder by sal desc)awhere rownum<=3*3order by sal )aorder by sal desclimit 0,3

oracle的rownum 在MySql里用什么表示

二楼正解,一楼纯属胡说八道

oracle 的rownum 在mysql中怎么用 求解决

rownum 是oracle独特的,其他数据库没有的mysql中,你可以类似下面的写法来达到一样的效果:SELECT @rowno:=@rowno+1 as rowno,r.* from hoifun r,(select @rowno:=0) t海枫科技

关于mysql全文索引的问题

收缩一般用 likeselec * from 3g_seach where 字段名 like("收缩的内容%") //收缩前段部分selec * from 3g_seach where 字段名 like("%收缩的内容") //收缩后端部分selec * from 3g_seach where 字段名 like("%收缩的内容%") //收缩所有部分百分号(%)很重要, 各个都不同 还可以用mysql> SELECT * FROM articles -> WHERE MATCH (title,body) AGAINST ("database");+----+-------------------+------------------------------------------+| id | title | body |+----+-------------------+------------------------------------------+| 5 | MySQL vs. YourSQL | In the following database comparison ... || 1 | MySQL Tutorial | DBMS stands for DataBase ... |+----+-------------------+------------------------------------------+

mysql中 ,如何用 as 取别名? 谢谢大家!!!

兄跌你要加油啦

php+mysql出现了404问题,求解!

代码没有问题,估计你的Tomcat没配置好

如何更改mysql命令下提示信息_MySQL

我们经常会遇到这样的问题你还在为你的MySQL命令模式下,前面的提示信息还是:MySQL>,那么我们如何更改mysql命令下提示信息呢?这样对当前选中哪个数据库,当前是用什么用户登录,登录是登录到哪台服务器上,都不知道。其实只要在登录时,多加一个参数,就可以搞定的。正常登录是:MySQL -h localhost -u root -p只要在这信息后面加上:--prompt="前置信息" 就可以了。具体命令如下:MySQL -h localhost -u root -p --prompt="/u@/h: /d :/m/s>"登录后,显示的前置信息就会是:root@localhost:05:03:00>其中就是你选择的数据库,当前是未选择数据库,所以是none.如果你选择了一个数据库:use lyb;就会显示如下:root@localhost: lyb 05:03:00>呵呵,这样是不是方便多了哈

mysq存储过程l判断一个年份是否为闰年

SELECT# check if the year is a leap year:IF((YEAR(mydate) % 4 = 0 AND YEAR(mydate) % 100 != 0) OR YEAR(mydate) % 400 = 0,# if so, check if the date is before or after february 29th. if that is the case, we subtract one from the valueIF(DAYOFYEAR(mydate) > DAYOFYEAR("2008-02-28"), DAYOFYEAR(mydate) - 1, DAYOFYEAR(mydate)),# if the year isn"t a leap year, just return the regular dayofyear() valueDAYOFYEAR(mydate))FROM mytbl

谈谈mongodb,mysql的区别和具体应用场景

谈谈mongodb,mysql的区别和具体应用场景个是关系型数据库一个是非关系型数据库,各自有不同的特点应用在不同的场景和需求下,建议先多了解二者的区别,自然明白各自使用

如何用redis/memcache做Mysql缓存层

有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。1. check table 和 repair table登陆mysql 终端:mysql -uxxxxx -p dbnamecheck table tabTest;如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:repair table tabTest;进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。2. myisamchk, isamchk其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:myisamchk tablename.MYI进行检测,如果需要修复的话,可以使用:myisamchk -of tablename.MYI关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。-----------------------------另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:[ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)

「我、我的、我自己」英文怎么说?I, me, my, mine和myself 中文意思与用法!

「我、我的、我自己」英文怎么说? I, me, my, mine, 和 myself这几个英文单字你是不是也常搞混呢?虽然看起来中文意思差不多,但是他们的用法、在句子中的位置可是完全不一样呢! Let"s talk的Niharika老师整理出了这几个单字的正确用法和例句,让你避免犯这种幼稚园等级的错误,相信你看过之后也能一下就上手。 1. I & Me – 我 两个字都是指「我」,”I”是主词,”me”则是受词。 ex. I gave John the book. /John gave me the book. 我给John那本书。 /John给我那本书。 ex. John and I saw Jane at the party. John和我在派对上看见了Jane。 ex. The teacher called Sarach and me. 老师叫了Sarach和我。 2. My & Mine – 我的/我的(某物) “my”要放在名词前面,Mine则是指前文曾提到的「我的某个东西」。 ex. John is my friend. /John is a friend of mine. John是我的朋友。/ John是我的一个朋友。 ex. John"s car is white and mine is black. John的车是白色的然后我的是黑色的。 ex. You"re mine. 你是我的。 3. Myself – 我自己 用来表示「你自己」做的一个动作。 ex. I cut myself with a knife. 我用一把刀把自己切开。 ex. I baked a cake by meself. 我自己烤了一个蛋糕。 ex. I went for a movie by myself. 我自己一个人去看电影。 图片来源:Pexels I, I 中文, I 意思, I 用法, I 翻译, Me, Me 中文, Me 意思, Me 用法, Me 翻译, mine, Mine 中文, Mine 意思, Mine 用法, Mine 翻译, my, My 中文, My 意思, My 用法, My 翻译, myself, Myself 中文, Myself 意思, Myself 用法, Myself 翻译, 我 英文, 我的 英文, 我自己 英文

英语短文:关于Mystatue的作文及翻译

my happy dayYestaday,i went to the zoo,and i really had a happy day. In the zoo,i saw lovely pandas which are the special animal that only live in china.There are also many other animals that interested me very much. I spent nearly a whole day in the zoo,a

一首歌的开头是哦ho。。。地myshit。。

Hollaback Girl-Gwen StefaniUh huh, this is my shitAll the girls stomp your feet like thisA few times I"ve been around that trackSo it"s not just gonna to happen like thatBecause I ain"t no hollaback girlI ain"t no hollaback girlOoooh ooh, this my shit, this my shitI heard that you were talking shitAnd you didn"t think that I would hear itPeople hear you talking like that, getting everybody fired upSo I"m ready to attack, Gonna lead the packgonna get a touch down gonna take you outThat"s right, put your pom-poms downs, getting everybody fired upA few times I"ve been around that trackSo it"s not just gonna to happen like thatBecause I ain"t no hollaback girlI ain"t no hollaback girlOoooh ooh, this my shit, this my shitSo that"s right dude, meet me at the bleachersNo principals,no student-teachersAll of us want to be the winner, but there can only be oneSo I"m gonna fight, gonna give it my allGonna make you fall, gonna sock it to youThat"s right I"m the last one standing, another one bites the dustA few times I"ve been around that trackSo it"s not just gonna to happen like thatBecause I ain"t no hollaback girlI ain"t no hollaback girlOoooh ooh, this my shit, this my shitLet me hear you say this shit is bananasB-A-N-A-N-A-S(This shit is bananas)(B-A-N-A-N-A-S)X2A few times I"ve been around that trackSo it"s not just gonna to happen like thatBecause I ain"t no hollaback girlI ain"t no hollaback girlOoooh ooh, this my shit, this my shit下载http://cdn1-42.projectplaylist.com/e1/static10/mp3rss/audio/236587.mp3

spl文件如何导入mysql数据库

通过navicat 或phpmyadmin 都可以导入。

MySQL如何查看元数据锁阻塞在哪里

MySQL如何查看元数据锁阻塞在哪里操作步骤:1、session 1 执行: start transaction; select *from t1;2、session 2 在第1步执行完后执行: drop table t1;此时session 2的drop语句被阻塞。那么怎么分析查看元数据锁呢?方法:1)执行show processlist;,可以看到drop语句在等待元数据锁mysql> show processlist; +----+-------------+-----------+------+---------+---------+-----------------------------------------------------------------------------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+-------------+-----------+------+---------+---------+-----------------------------------------------------------------------------+------------------+ | 5 | system user | | NULL | Connect | 1050234 | Waiting for master to send event | NULL | | 6 | system user | | NULL | Connect | 983193 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | | 8 | root | localhost | yzs | Sleep | 93 | | NULL | | 9 | root | localhost | yzs | Query | 3 | Waiting for table metadata lock | drop table t1 | | 10 | root | localhost | NULL | Query | 0 | init | show processlist | +----+-------------+-----------+------+---------+---------+-----------------------------------------------------------------------------+------------------+ 5 rows in set (0.00 sec) 2)可以看到当前正在运行的事务的线程是trx_mysql_thread_id:8,那么这个线程在干什么呢?mysql> select *from information_schema.innodb_trxG *************************** 1. row *************************** trx_id: 17683 trx_state: RUNNING trx_started: 2017-10-18 05:32:46 trx_requested_lock_id: NULL trx_wait_started: NULL trx_weight: 0 trx_mysql_thread_id: 8 trx_query: NULL trx_operation_state: NULL trx_tables_in_use: 0 trx_tables_locked: 0 trx_lock_structs: 0 trx_lock_memory_bytes: 320 trx_rows_locked: 0 trx_rows_modified: 0 trx_concurrency_tickets: 0 trx_isolation_level: REPEATABLE READ trx_unique_checks: 1 trx_foreign_key_checks: 1 trx_last_foreign_key_error: NULL trx_adaptive_hash_latched: 0 trx_adaptive_hash_timeout: 10000 trx_is_read_only: 0 trx_autocommit_non_locking: 0 1 row in set (0.03 sec) 3)可以看到这个线程执行的是select语句,如果执行show engine innodb status;可以看到该事务处于sleep状态,也就是说这个事务语句执行完了,但是没有提交。执行kill 8,将该事务的线程杀掉就可以了。或者检查业务的SQL语句,检查下是否有未提交的SQL语句。mysql> select *from performance_schema.events_statements_currentG *************************** 1. row *************************** THREAD_ID: 27 EVENT_ID: 15 END_EVENT_ID: 15 EVENT_NAME: statement/sql/select SOURCE: mysqld.cc:962 TIMER_START: 1050544992900922000 TIMER_END: 1050544993740836000 TIMER_WAIT: 839914000 LOCK_TIME: 196000000 SQL_TEXT: select *from t1 DIGEST: 1aa32397c8ec37230aed78ef16126571 DIGEST_TEXT: SELECT * FROM `t1` CURRENT_SCHEMA: yzs OBJECT_TYPE: NULL OBJECT_SCHEMA: NULL OBJECT_NAME: NULL OBJECT_INSTANCE_BEGIN: NULL MYSQL_ERRNO: 0 RETURNED_SQLSTATE: NULL MESSAGE_TEXT: NULL ERRORS: 0 WARNINGS: 0 ROWS_AFFECTED: 0 ROWS_SENT: 10 ROWS_EXAMINED: 10 CREATED_TMP_DISK_TABLES: 0 CREATED_TMP_TABLES: 0 SELECT_FULL_JOIN: 0 SELECT_FULL_RANGE_JOIN: 0 SELECT_RANGE: 0 SELECT_RANGE_CHECK: 0 SELECT_SCAN: 1 SORT_MERGE_PASSES: 0 SORT_RANGE: 0 SORT_ROWS: 0 SORT_SCAN: 0 NO_INDEX_USED: 1 NO_GOOD_INDEX_USED: 0 NESTING_EVENT_ID: NULL NESTING_EVENT_TYPE: NULL 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!您可能感兴趣的文章:Mysql查询正在执行的事务以及等待锁的操作方式基于更新SQL语句理解MySQL锁定详解PHP利用Mysql锁解决高并发的方法PHP+MySQL高并发加锁事务处理问题解决方法MySQL锁机制与用法分析MySQL语句加锁的实现分析Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)MYSQL 解锁与锁表介绍一次Mysql死锁排查过程的全纪录MySQL对于各种锁的概念理解

远程连接mysql失败了怎么办

1、排除网络或防火墙问题(推荐教程:mysql教程)先看是否能ping通远程服务器,ping 192.168.1.211,如果不可以就是网络问题。然后,检查端口是否被防火墙挡住了,telnet 192.168.1.211 3306,如果连接失败,配置防火墙。配置防火墙,开启3306端口vi /etc/sysconfig/iptables-A INPUT -m state _state NEW -m tcp -p tcp _dport 3306 -j ACCEPT(允许3306端口通过防火墙)/etc/init.d/iptables restart(重启防火墙使配置生效)2、检查MySQL配置如果开启了防火墙,telnet还是失败,通过netstat查看3306的端口状态:netstat -apn|grep 3306tcp6 0 0 127.0.0.1:3306 :::* LISTEN 13524/mysqld注意地方,这说明3306被绑定到了本地。检查一下my.cnf的配置,这里可以配置绑定ip地址。bind-address=addr不配置或者IP配置为0.0.0.0,表示监听所有客户端连接。ps:我开启3306端口,并且检查MySQL配置之后,telent仍然失败,但是在本机telnet是ok的,再三确认了配置没有问题。后来跟我们的ucloud账号管理员提了一下,才知道ucloud管理后台也需要开启3306端口,用云服务器的留意这个。3、检查用户访问权限MySQL建用户的时候会指定一个host,默认是127.0.0.1/localhost,那么这个用户就只能本机访问,其它机器用这个用户帐号访问会提示没有权限,host改为%,表示允许所有机器访问。4、重启mysql,使配置生效。

[死亡飞车].Death.Race.UNRATED.2008.Blu-ray.1080p.x264.DTS-HiS@MySiLU.disk02.mkv

unrated -- 未分级Blu-ray -- 蓝光光盘1080p.x264. -- 视频尺寸为1080p.x264.DTS-HiS@MySiLU. -- 思路(字幕组)disk02 -- 第二张碟mkv -- 文件格式

MYSql 语句

看他们网上的,写得都是千篇一律,同时,好多也写得不是很好,下面是我自己总结的有关mysql的使用细节,也是我在学习过程中的一些记录吧,希望对你有点帮助,后面有关存储过程等相关操作还没有总结好,下次总结好了再发给你吧,呵呵~~~~~MySql学习笔记MySql概述:MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。这样就增加了速度与提高了灵活性。并且MySql软件是一个开放源码软件。注意,MySql所支持的TimeStamp的最大范围的问题,在32位机器上,支持的取值范围是年份最好不要超过2030年,然后如果在64位的机器上,年份可以达到2106年,而对于date、与datetime这两种类型,则没有关系,都可以表示到9999-12-31,所以这一点得注意下;还有,在安装MySql的时候,我们一般都选择Typical(典型安装)就可以了,当然,如果还有其它用途的话,那最好选择Complete(完全安装);在安装过程中,一般的还会让你进行服务器类型的选择,分别有三种服务器类型的选择,(Developer(开发机)、Server Machine(服务器)、Dedicated MySql Server Machine(专用MYSQL服务器)),选择哪种类型的服务器,只会对配置向导对内存等有影响,不然其它方面是没有什么影响的;所以,我们如果是开发者,选择开发机就可以啦;然后接下来,还会有数据库使用情况对话框的选择,我们只要按照默认就可以啦;连接与断开服务器:连接:在windows命令提示符下输入类似如下命令集:mysql –h host –u user –p例如,我在用的时候输入的是:mysql –h localhost –u root –p然后会提示要你输入用户密码,这个时候,如果你有密码的话,就输入密码敲回车,如果没有密码,直接敲回车,就可以进入到数据库客户端;连接远程主机上的mysql,可以用下面的命令:mysql –h 159.0.45.1 –u root –p 123断开服务器:在进入客户端后,你可以直接输入quit然后回车就可以了;下面就数据库相关命令进行相关说明你可以输入以下命令对数据库表格或者数据库进行相关操作,在这里就省略了,然后直接进行文字说明了;Select version(),current_date;//从服务器得到当前mysql的版本号与当前日期Select user(); //得到当前数据库的所有用户Use databasename; 进入到指定的数据库当中,然后就可以操作这个数据库当中的表格了Show databases; //查询目前数据库中所有的数据库,并且显示出来;Create batabase databasename;创建数据库,例如:create database manager;Show tables; //查看当前数据库中的所有表格;Create table tablename(colums);创建表,并且给表指定相关列,例如:create table pet(name varchar(20),owner varchar(20),species varchar(20),sex char(1),birth date,death date);Describe tablename;将表当中的所有信息详细显示出来,例如:describe pet;可以用命令一次插入多条记录,例如:Insert into pet values(‘Puffball","Diane","hamster","f","1993-12-3",null),( ‘Puffball","Diane","hamster","f","1993-12-3",now());Select * from pet; 从pet表当中查询出所有的记录,显示出来;Delete from pet where id=1;删除ID为1的那一条记录;Update pet set birth="2001-1-3" where name="Bowser";更新name为Bowser的记录当中的birth字段的值;Select distinct owner from pet;从pet表中选择出owner字段的值唯一的行,如果有多行记录这个字段的值相同,则只显示最后一次出现这一值的一行记录;有关日期计算:Select name,birth,curdate(),(year(curdate())-year(birth)) as age from pet;此处,year()函数用于提取对应字段的年份,当然类似的还有month(),day()等;在mysql当中,sql语句可以使用like查询,可以用”_”配任何单个字符,用”%”配任意数目字符,并且SQL模式默认是忽略大小写,例如:select * from pet where name like ‘%fy";当然也可以用正则表达式模式进行配。同时在sql当中,也要注意分组函数、排序函数、统计函数等相关用法,在这里只列举一二;Select species,count(*) from pet group by speceis;Select * from pet order by birth desc;查询最大值的相关操作:Select max(age) from pet;取前多少项记录,这个主要用于分页查询操作当中,Select * from pet order by birth desc limit 3;取前三条记录,Select * from pet order by birth desc limit 0,3;这个可以用于分页查询,limit后面的第一个参数,是起始位置,第二个参数是取记录条数;有关创建表格自增长字段的写法:Create table person(id int(4) not null auto_increment,name char(20) not null,primary key (id));修改表操作:向表中增加字段:注意,在这个地方,如果是增加多个字段的时候,就要用括号括起来,不然会有问题,如果是单个字段的话,不用括号也没事;Alter table test add(address varchar(50) not null default ‘xm",email varchar(20) not null);将表中某个字段的名字修改或者修改其对应的相关属性的时候,要用change对其进行操作;Alter table test change email email varchar(20) not null default ‘zz";//不修改字段名Alter table test change email Email varchar(30) not null;//修改字段名称删除表中字段:Alter table test drop email;//删除单个字段Alter table test drop address,drop email;//删除多列可以用Drop来取消主键与外键等,例如:Alter table test drop foreign key fk_symbol;删除索引:Drop index index_name on table_name;例如:drop index t on test;向表中插入记录:注意,当插入表中的记录并不是所有的字段的时候,应该要在前面列出字段名称才行,不然会报错;Insert into test(name) values(‘ltx");Insert into test values(1,"ltx");也可以向表中同时插入多列值,如:Insert into test(name) values(‘ltx"),(‘hhy"),(‘xf");删除表中记录:Delete from test;//删除表中所有记录;Delete from test where id=1;//删除表中特定条件下的记录;当要从一个表或者多个表当中查询出一些字段然后把这些字段又要插入到另一个表当中的时候,可以用insert …..select语法;Insert into testt(name) (select name from test where id=4);从文件中读取行插入数据表中,可以用Load data infile语句;Load data infile ‘test.txt" into table test;可以用Describe语法进行获取有关列的信息;Describe test;//可以查看test表的所有信息,包括对应列字段的数据类型等;MySql事务处理相关语法;开始一项新的事务:start transaction或者begin transaction提交事务:commit事务回滚:rollbackset autocommit true|false 语句可以禁用或启用默认的autocommit模式,只可用于当前连接;例子:Start transaction;Update person set name="LJB" where id=1;Commit | rollback;数据库管理语句修改用户密码:以root用户为例,则可以写成下面的;mysql –u root –p 旧密码 –password 新密码Mysql –u root –password 123;//将root用户的密码修改成123,由于root用户开始的时候,是没有密码的,所以-p旧密码就省略了;例如修改一个有密码的用户密码:mysql –u ltx –p 123 –password 456;增加一个用户test1,密码为abc,让他可以在任何时候主机上登陆,并对所有数据库有查询、插入、修改、删除的权限。Grant select,insert,update,delete on *.* to test1@”%” identified by ‘abc";增加一个test2用户,密码为abc,让他只可以在localhost上登陆,并且可以对数据库进行查询、插入、修改、删除操作;Grant select,insert,update,delete on mydb.* to test2@localhost identified by ‘abc";如果不想让用户test2有密码,可以再输入以下命令消掉密码:Grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;备份数据库常用命令:mysqldump –h host –u username –p dbname>保存路径与文件名然后回车后,会让你输入用户密码,输入密码后,再回车就OK啦;Mysqldump –hlocalhost –uroot –p test >E:db est.sql这一命令具体解释下:这个命令就是备份test数据库,并且将备份的内容存储为test.sql文件,并且保存在E:db下面;命令当中-p 前面的test是数据库名,然后在数据库名后面要跟上一个”>”,然后接下来,就是写要保存的位置与保存文件的文件名;将备份好的数据库导入到数据库当中去:也就是运行.sql文件将数据库导入数据库当中去->首先你得创建数据库,然后运行如下命令:mysql –hlocalhost –uroot –p linux<E:db est.sql然后回车,再输入密码就可以啦;解释下上面的命令:linux是就要导入的数据库名字,然后后面要紧跟着“<”符号,然后后面就是要导入的数据库文件;将数据库导出保存成XML文件、从XML文件导入数据到数据库:导出表中数据:mysql –X –h hostName –u userName –p Pwd –e “use DatabaseName;sql;” >xml文件名或者用另外一种方式也行:mysqldump –xml –h hostName –u userName –p pwd dbName tableName //这一种只用于显示在当前的mysql客户端,不保存到文件当中;相关说明:-X代表的是文件的格式是XML,然后-e一写不能掉,还有就是要用双引号将要操作的语句括起来;单引号不行;例如:mysql –X –hlocalhost –uroot –p –e “use test;select * from pet;”>E:dbout.xml从XML文件导入数据到数据库:Insert into tableName values(1,load_file(‘filepath"));例如:insert into pet values(1,load_file(“E:dbout.xml”));查看数据库状态与查询进程:Show status;//查看状态Show processlist;//查看进程更改用户名,用以下命令:Update set user=”新名字” where user=”旧用户名”;给数据库用户设置管理员权限:Mysqladmin –h host –u username –p pwd;以root用户为例;Mysqladmin –h localhost –u root –p 123;存储过程与函数存储程序和函数分别是用create procedure和create function语句,一个程序要么是一个程序要么是一个函数,使用call语句来调用程序,并且程序只能用输出变量传回值;要想在MySql5.1中创建子程序,必须具有create routine权限,并且alter routine和execute权限被自动授予它的创建者;创建存储过程:首先声明分隔符,所谓分隔符是指你通知mysql客户端你已经输入一个sql语句的字符或字符串符号,在这里我们就以“//”为分隔符;Delimiter 分隔符如:delimiter //再创建存储过程:Create procedure 存储过程名 ( )声明存储过程开始:begin然后开始写存储过程体:Select * from pet;结束存储过程:End;//刚刚的例子全部写出来,完整的代码就是:Delimiter //Create procedure spt () //注意,这个地方,存储过程名与括号之间要有个空格BeginSelect * from pet;End;//到这里,整个存储过程就算写完啦执行存储过程:Call 存储过程名 ();//如,我们执行刚刚创建的存储过程,就是:Call spt ();//需要说明的是存储过程名后面一定要加个空格,而后面那个括号,则是用于传送参数的参数列表;另外,我们创建存储过程完成后,也只是创建了,但是只有调用call 存储过程名 ();//后才算执行完毕,才能看到存储过程的结果;是否可以解决您的问题?

mysql语句中like用法是什么

mysql语句中like用法:1、常见用法:(1)搭配%使用%代表一个或多个字符的通配符,譬如查询字段name中以大开头的数据:(2)搭配_使用_代表仅仅一个字符的通配符,把上面那条查询语句中的%改为_,会发现只能查询出一条数据。2、使用like模糊查询会导致索引失效,在数据量大的时候会有性能问题(1)尽量少以%或者_开头进行模糊查询通过explain执行计划,我们发现,使用like模糊查询时,如果不以%和_开头查询的话,索引还是有效的。(2)使用覆盖索引当查询的的条件和查询的结果都是索引中的字段的时候,这个索引我们可以称之为覆盖索引,这个时候,使用like模糊查询索引是有效的。InnoDB中主键可以不添加进索引中注意:使用覆盖索引,对于字段的长度是由要求限制的,一般超过长度,索引也会失效这里如果查询中带有descripition字段,则覆盖索引也会失效。扩展资料like语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。一、% 包含零个或多个字符的任意字符串:1、like"Mc%" 将搜索以字母 Mc 开头的所有字符串(如 McBadden)。2、like"%inger" 将搜索以字母 inger 结尾的所有字符串(如 Ringer、Stringer)。3、like"%en%" 将搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。二、:_(下划线) 任何单个字符:like"_heryl" 将搜索以字母 heryl 结尾的所有六个字母的名称(如 Cheryl、Sheryl)。三、[ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符: 1,like"[CK]ars[eo]n" 将搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。2、like"[M-Z]inger" 将搜索以字符串 inger 结尾、以从 M 到 Z 的任何单个字母开头的所有名称(如 Ringer)。

我想询问一下,MySQL中部署java程序,都需要什么步骤?谢谢!之前都需要做什么准备!

利用管道机制,先设置路径,然后再设置一些命令,下面有个列子,希望你能看懂set classpath=%JAVA_HOME%in;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;C:oracleora92in;C:Program FilesOraclejre1.1.8in;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;C:jakarta-tomcat-5.0.28commonliblog4j-1.2.8.jar;C:jakarta-tomcat-5.0.28commonlibclasses12.jar;javac tclsend.javajava tclsend

java 怎么连接mysql数据库

这篇文章主要以MySQL为例讲下Java如何连接到数据库的。当然,首先要安装有JDK(一般是JDK1.5.X)。然后安装MySQL,这些都比较简单,具体过程就不说了。配置好这两个环境后,下载JDBC驱动mysql-connector-java-5.0.5.zip(这个是最新版的)。然后将其解压缩到任一目录。我是解压到D盘,然后将其目录下的mysql-connector-java-5.0.5-bin.jar加到classpath里,具体如下:“我的电脑”-> “属性” -> “高级” -> “环境变量”,在系统变量那里编辑classpath,将D:mysql-connector-java-5.0.5mysql-connector-java-5.0.5-bin.jar加到最后,在加这个字符串前要加“;”,以与前一个classpath区分开。然后确定。环境配置好了,很简单。现在,先配置MySQL,设其用户名为“root”,密码为“root”。在命令行或用一个SQL的前端软件创建Database。我是用SQLyog的前端软件来创建Database的。先创建数据库:CREATE DATABASE SCUTCS;接着,创建表:CREATE TABLE STUDENT(SNO CHAR(7) NOT NULL,SNAME VARCHAR(8) NOT NULL,SEX CHAR(2) NOT NULL,BDATE DATE NOT NULL,HEIGHT DEC(5,2) DEFAULT 000.00,PRIMARY KEY(SNO));然后插入数据,可以用SQL语句insert into <表名> values (value1, value2, ...);也可以用SQLyog来操作好了,创建好了。下面,我们来编写.java文件来演示一下如何访问MySQL数据库。import java.sql.*;public class JDBCTest {public static void main(String[] args){// 驱动程序名String driver = "com.mysql.jdbc.Driver";// URL指向要访问的数据库名scutcsString url = "jdbc:mysql://127.0.0.1:3306/scutcs";// MySQL配置时的用户名String user = "root";// MySQL配置时的密码String password = "root";try {// 加载驱动程序Class.forName(driver);// 连续数据库Connection conn = DriverManager.getConnection(url, user, password);if(!conn.isClosed())System.out.println("Succeeded connecting to the Database!");// statement用来执行SQL语句Statement statement = conn.createStatement();// 要执行的SQL语句String sql = "select * from student";// 结果集ResultSet rs = statement.executeQuery(sql);System.out.println("-----------------");System.out.println("执行结果如下所示:");System.out.println("-----------------");System.out.println(" 学号" + " " + " 姓名");System.out.println("-----------------");String name = null;while(rs.next()) {// 选择sname这列数据name = rs.getString("sname");/* 何问起 hovertree.com */// 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。// 然后使用GB2312字符集解码指定的字节数组name = new String(name.getBytes("ISO-8859-1"),"GB2312");// 输出结果System.out.println(rs.getString("sno") + " " + name);}rs.close();conn.close();} catch(ClassNotFoundException e) {System.out.println("Sorry,can`t find the Driver!");e.printStackTrace();} catch(SQLException e) {e.printStackTrace();} catch(Exception e) {e.printStackTrace();} } }接下来我们运行一下看下效果:D: estjdbc>javac JDBCTest.javaD: estjdbc>java JDBCTestSucceeded connecting to the Database!-----------------------执行结果如下所示:-----------------------学号 姓名-----------------------0104421 周远行0208123 王义平0209120 何问起0309119 李 维0309203 欧阳美林0309226 柯乐义哈哈,成功啦

javaweb怎么连接mysql数据库

安装好mysql之后,那么你现在应该安装JDK了(JDK1.6就可以)安装好JDK之后,就是安装Eclipse了,要支持JDK版本,Eclipse安装的时候会自动去找JDK安装位置的,如果你是解压版的Eclipse,就要配置eclipse.ini文件了,将对应的JDK配置好,这些已经准备就绪的时候,就到mysql中创建数据库和表先创建数据库:CREATE DATABASE SCUTCS;接着,创建表:CREATE TABLE STUDENT(SNO CHAR(7) NOT NULL,SNAME VARCHAR(8) NOT NULL,SEX CHAR(2) NOT NULL,BDATE DATE NOT NULL,HEIGHT DEC(5,2) DEFAULT 000.00,PRIMARY KEY(SNO));然后插入数据,可以用SQL语句insert into <表名> values (value1, value2, ...);

对MySQL几种联合查询的通俗解释_MySQL

表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 两个表a、b相连接,要取出id相同的字段。select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据。此时的取出的是:1 a1 b1 2 a2 b2 那么left join 指:select * from a left join b on a.aid = b.bid 首先取出a表中所有数据,然后再加上与a、b匹配的的数据。此时的取出的是:1 a1 b1 2 a2 b2 3 a3 空字符同样的也有right join指的是首先取出b表中所有数据,然后再加上与a、b匹配的的数据。此时的取出的是:1 a1 b1 2 a2 b2 4 空字符 b4LEFT JOIN 或 LEFT OUTER JOIN。左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。实例"Persons" 表: Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing"Orders" 表: Id_O OrderNo Id_P 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 65左连接(LEFT JOIN)实例现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。您可以使用下面的 SELECT 语句:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName结果集: LastName FirstName OrderNo Adams John 22456 Adams John 24562 Carter Thomas 77895 Carter Thomas 44678 Bush GeorgeLEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

MySQL 中的各种 JOIN

本文主要介绍 SQL 标准中定义的各种连接的意义和区别,例如,交叉连接( CROSS JOIN )、内连接( INNER JOIN )、外连接( OUTER JOIN )、自然连接( NATURAL JOIN )等,并结合例子讲解这些连接在 MySQL 中的语法和表现。 从网上的资料看, JOIN 更多翻译为连接,本文中凡是出现中文“连接”的地方都是指 JOIN 。 本文中用到的所有例子涉及两张表—— customers 用户表和 orders 订单表,其中订单表中的 cust_id 字段表示用户的唯一 ID,也就是用户表的主键 cust_id 。两张表的数据如下: 注:两张表都经过了简化,实际业务中这两张表肯定还包括其他字段。 英文维基百科 JOIN 词条 对连接的定义如下: 翻译过来就是,“连接可以根据一张(自连接)或多张表中的共同值将这些表的列数据合并为一个新的结果集,标准 SQL 定义了五种连接:内连接、左外连接、右外连接、全外连接和交叉连接。” 也就是说,连接是 SQL 标准中定义的一种组合多张表的方式,当然一张表自身也可以和自身组合,称为自连接。连接后得到的结果集的每一列其实都来自用于连接的多张表,不同的连接类型只是区分了这些列具体从哪张表里来,列里填充的是什么数据。 其实英文维基百科的 JOIN 词条已经把各种连接的类型解释地非常清楚了,非常值得去看一下。 我们来看一下 SQL 标准中定义的各种连接类型,理解各种连接最好的方法就是把需要连接的表想象成集合,并画出可以反映集合的交与并的情况的图——韦恩图,例如下图就画出了 SQL 中定义的几种主要连接。 请先仔细查看一下图中的内容,你可以从中归纳出几种连接类型呢? 虽然图中画了 7 种集合的交并情况,但是总结起来,主要是两种连接类型在起作用——内连接( INNER JOIN )和外连接( OUTER JOIN ),其中外连接又分为了左外连接( LEFT OUTER JOIN )、右外连接( RIGHT OUTER JOIN )和全外连接( FULL OUTER JOIN )。 下面先简单介绍一下 SQL 标准中各种连接的定义,然后在「MySQL 中的连接」一节再用例子来演示 MySQL 中支持的各种连接。 连接既然是用来合并多张表的,那么要定义一个连接就必须指定需要连接的表,并指定可选的连接条件。例如,一个典型的 SQL 连接语句如下: 我们用表 A 和表 B 指代需要连接的两张表,经过 内连接 后得到的结果集 仅 包含所有满足 连接条件 的数据;而经过 外连接 后得到的数据集 不仅 包含满足 连接条件 的数据,还包含其他数据,具体的差别是: 在上面「SQL 标准定义的主要连接」一图中并没有列出交叉连接,交叉连接会对连接的两张表做笛卡尔积,也就是连接后的数据集中的行是由第一张表中的每一行与第二张表中的每一行配对而成的,而不管它们 逻辑上 是否可以搭配在一起。假设交叉连接的两张表分别有 m 和 n 行数据,那么交叉连接后的数据集就包含 m 乘以 n 行数据。 连接根据连接的条件不同,又可以区分为等值连接和非等值连接,「SQL 标准定义的主要连接」图中画出的连接的连接条件都是比较两个字段是否相等,它们都是等值连接。 自然连接是等值连接的一种特殊形式,自然连接会自动选取需要连接的两张表中字段名相同的 所有 列做相等比较,而不需要再指定连接条件了。 注:以下内容全部基于 MySQL 5.7 版本,所有例子只保证在 MySQL 5.7 上是可以正确执行的。 MySQL 中支持的连接类型和关键字如下: 上面的表示方法摘自 MySQL 5.7 版本 官方文档 ,其中 | 表示两者皆可出现, [] 表示的是可选的, {} 表示的是必选的,例如 NATURAL LEFT JOIN 和 NATURAL JOIN 都是合法的。 可以看到,除了全外连接( FULL OUTER JOIN )以外, MySQL 基本支持了 SQL 标准中定义的各种连接。在 MySQL 中全外连接可以通过 UNION 合并的方式做到,当然前提是你知道自己为什么需要这么做,具体参见: Full Out Join in MySQL 。 MySQL 语法中还支持一个并不在 SQL 标准中的 STRAIGHT_JOIN ,它在 表现上 和内连接或者交叉连接并无区别,只是一种给 MySQL 优化器的一个提示, STRAIGHT_JOIN 提示 MySQL 按照语句中表的顺序加载表,只有在你明确清楚 MySQL 服务器对你的 JOIN 语句做了负优化的时候才可能用到它。 还有一点需要说明的是,根据 官方文档 ,在 MySQL 中, JOIN 、 CROSS JOIN 和 INNER JOIN 实现的功能是一致的,它们在语法上是等价的。从语义上来说, CROSS JOIN 特指无条件的连接(没有指定 ON 条件的 JOIN 或者没有指定 WHERE 连接条件的多表 SELECT ), INNER JOIN 特指有条件的连接(指定了 ON 条件的 JOIN 或者指定了 WHERE 连接条件的多表 SELECT )。当然,如果你非要写 ... CROSS JOIN ... ON ... 这样的语法,也是可以执行的,虽然写着交叉连接,实际上执行的是内连接。 下面我们就用例子来看一看 MySQL 中支持的几种连接的例子。 注:下面的例子都没有指定 ORDER BY 子句,返回结果的顺序可能会因为数据插入顺序的不同而略有不同。 MySQL 的交叉连接或内连接有两种写法,一种是使用 JOIN 并用 ON 或者 USING 子句指定连接条件的写法,一种是普通的 SELECT 多表,并且用 WHERE 子句指定连接的键的写法。 下面的例子是一个交叉连接: 上面的写法等价于: 当然,第二种写法中如果将 CROSS JOIN 替换成 JOIN 或者 INNER JOIN 也是可以正确执行的。上面两条语句的执行结果如下: 可以看到共返回了 30 行结果,是两张表的笛卡尔积。 一个内连接的例子如下: 上面的写法等价于: 在连接条件比较的字段相同的情况下,还可以改用 USING 关键字,上面的写法等价于: 上面三条语句的返回结果如下: 可以看到只返回了符合连接条件 customers.cust_id = orders.cust_id 的 6 行结果,结果的含义是所有有订单的用户和他们的订单。 左外连接和右外连接的例子如下,其中的 OUTER 关键字可以省略: 其中右外连接的返回与内连接的返回是一致的(思考一下为什么),左外连接的返回结果如下: 可以看到一共返回了 8 行数据,其中最后两行数据对应的 order_id 的值为 NULL ,结果的含义是所有用户的订单,不管这些用户是否已经有订单存在了。 根据前面介绍的自然连接的定义,自然连接会自动用参与连接的两张表中 字段名相同 的列做等值比较,由于例子中的 customers 和 orders 表只有一列名称相同,我们可以用自然连接的语法写一个与上面的内连接的例子表现行为一样的语句如下: 可以看到,使用自然连接就不能再用 ON 子句指定连接条件了,因为这完全是多余的。 当然,自然连接同样支持左外连接和右外连接。 下面用一个 customers 表自连接的例子再来说明一下自然连接,语句如下: 因为是自连接,因此必须使用 AS 指定别名,否则 MySQL 无法区分“两个” customers 表,运行的结果如下: 可以看到结果集和 customers 表完全一致,大家可以思考一下为什么结果是这样的。 文章之前也提到了,MySQL 还支持一种 SQL 标准中没有定义的“方言”, STRAIGHT_JOIN , STRAIGHT_JOIN 支持带 ON 子句的内连接和不带 ON 子句的交叉连接,我们来看一个 STRAIGHT_JOIN 版本的内连接的例子: 返回结果与前面内连接的例子是一致的,如下: STRAIGHT_JOIN 的表现和 JOIN 是完全一致的,它只是一种给 MySQL 优化器的提示,使得 MySQL 始终按照语句中表的顺序读取表(上面的例子中,MySQL 在执行时一定会先读取 customers 表,再读取 orders 表),而不会做改变读取表的顺序的优化。关于 MySQL 优化器的话题这里不做展开,需要说明的是除非你非常清楚你在做什么,否则不推荐直接使用 STRAIGHT_JOIN 。 你能理解上面的语句是在检索什么数据吗? 本文主要介绍了 SQL 标准里定义的各种连接的概念,以及 MySQL 中的实现,并通过各种例子来介绍了这些连接的区别。这些连接不一定都能在实际开发中用到,但是做到心中有知识也还是很有必要的。 那么,现在再回忆一下,什么是内连接、外连接、自连接、等值连接和自然连接?他们的区别是什么? 最后,给大家留一个思考题,为什么 MySQL 中没有左外连接或者右外连接版本的 STRAIGHT_JOIN ?

对MySQL几种联合查询的通俗解释

表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 两个表a、b相连接,要取出id相同的字段。 select * from a inner join b on a.aid = b.bid 这是仅取出匹配的数据。 此时的取出的是: 1 a1 b1 2 a2 b2 那么left join 指: select * from a left jo表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 两个表a、b相连接,要取出id相同的字段。select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据。此时的取出的是:1 a1 b1 2 a2 b2 那么left join 指:select * from a left join b on a.aid = b.bid 首先取出a表中所有数据,然后再加上与a、b匹配的的数据。此时的取出的是:1 a1 b1 2 a2 b2 3 a3 空字符同样的也有right join指的是首先取出b表中所有数据,然后再加上与a、b匹配的的数据。此时的取出的是:1 a1 b1 2 a2 b2 4 空字符 b4LEFT JOIN 或 LEFT OUTER JOIN。左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。实例"Persons" 表: Id_P LastName FirstName Address City 1 Adams John Oxford Street London 2 Bush George Fifth Avenue New York 3 Carter Thomas Changan Street Beijing"Orders" 表: Id_O OrderNo Id_P 1 77895 3 2 44678 3 3 22456 1 4 24562 1 5 34764 65左连接(LEFT JOIN)实例现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。您可以使用下面的 SELECT 语句:SELECT Persons.LastName, Persons.FirstName, Orders.OrderNoFROM PersonsLEFT JOIN OrdersON Persons.Id_P=Orders.Id_PORDER BY Persons.LastName结果集: LastName FirstName OrderNo Adams John 22456 Adams John 24562 Carter Thomas 77895 Carter Thomas 44678 Bush GeorgeLEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

几种MySQL中的联接查询操作方法总结_MySQL

前言现在系统的各种业务是如此的复杂,数据都存在数据库中的各种表中,这个主键啊,那个外键啊,而表与表之间就依靠着这些主键和外键联系在一起。而我们进行业务操作时,就需要在多个表之间,使用sql语句建立起关系,然后再进行各种sql操作。那么在使用sql写出各种操作时,如何使用sql语句,将多个表关联在一起,进行业务操作呢?而这篇文章,就对这个知识点进行总结。联接查询是一种常见的数据库操作,即在两张表(多张表)中进行匹配的操作。MySQL数据库支持如下的联接查询:CROSS JOIN(交叉联接)INNER JOIN(内联接)OUTER JOIN(外联接)其它在进行各种联接操作时,一定要回忆一下在《SQL逻辑查询语句执行顺序》这篇文章中总结的SQL逻辑查询语句执行的前三步:执行FROM语句(笛卡尔积)执行ON过滤添加外部行每个联接都只发生在两个表之间,即使FROM子句中包含多个表也是如此。每次联接操作也只进行逻辑查询语句的前三步,每次产生一个虚拟表,这个虚拟表再依次与FROM子句的下一个表进行联接,重复上述步骤,直到FROM子句中的表都被处理完为止。前期准备 1.新建一个测试数据库TestDB;create database TestDB; 创建测试表table1和table2; CREATE TABLE table1 ( customer_id VARCHAR(10) NOT NULL, city VARCHAR(10) NOT NULL, PRIMARY KEY(customer_id) )ENGINE=INNODB DEFAULT CHARSET=UTF8; CREATE TABLE table2 ( order_id INT NOT NULL auto_increment, customer_id VARCHAR(10), PRIMARY KEY(order_id) )ENGINE=INNODB DEFAULT CHARSET=UTF8; 插入测试数据; INSERT INTO table1(customer_id,city) VALUES("163","hangzhou"); INSERT INTO table1(customer_id,city) VALUES("9you","shanghai"); INSERT INTO table1(customer_id,city) VALUES("tx","hangzhou"); INSERT INTO table1(customer_id,city) VALUES("baidu","hangzhou"); INSERT INTO table2(customer_id) VALUES("163"); INSERT INTO table2(customer_id) VALUES("163"); INSERT INTO table2(customer_id) VALUES("9you"); INSERT INTO table2(customer_id) VALUES("9you"); INSERT INTO table2(customer_id) VALUES("9you"); INSERT INTO table2(customer_id) VALUES("tx"); 准备工作做完以后,table1和table2看起来应该像下面这样: mysql> select * from table1; +-------------+----------+ | customer_id | city | +-------------+----------+ | 163 | hangzhou | | 9you | shanghai | | baidu | hangzhou | | tx | hangzhou | +-------------+----------+ 4 rows in set (0.00 sec) mysql> select * from table2; +----------+-------------+ | order_id | customer_id | +----------+-------------+ | 1 | 163 | | 2 | 163 | | 3 | 9you | | 4 | 9you | | 5 | 9you | | 6 | tx | +----------+-------------+ 7 rows in set (0.00 sec)准备工作做的差不多了,开始今天的总结吧。CROSS JOIN联接(交叉联接)CROSS JOIN对两个表执行FROM语句(笛卡尔积)操作,返回两个表中所有列的组合。如果左表有m行数据,右表有n行数据,则执行CROSS JOIN将返回m*n行数据。CROSS JOIN只执行SQL逻辑查询语句执行的前三步中的第一步。CROSS JOIN可以干什么?由于CROSS JOIN只执行笛卡尔积操作,并不会进行过滤,所以,我们在实际中,可以使用CROSS JOIN生成大量的测试数据。对上述测试数据,使用以下查询:select * from table1 cross join table2;就会得到以下结果:+-------------+----------+----------+-------------+| customer_id | city | order_id | customer_id |+-------------+----------+----------+-------------+| 163 | hangzhou | 1 | 163 || 9you | shanghai | 1 | 163 || baidu | hangzhou | 1 | 163 || tx | hangzhou | 1 | 163 || 163 | hangzhou | 2 | 163 || 9you | shanghai | 2 | 163 || baidu | hangzhou | 2 | 163 || tx | hangzhou | 2 | 163 || 163 | hangzhou | 3 | 9you || 9you | shanghai | 3 | 9you || baidu | hangzhou | 3 | 9you || tx | hangzhou | 3 | 9you || 163 | hangzhou | 4 | 9you || 9you | shanghai | 4 | 9you || baidu | hangzhou | 4 | 9you || tx | hangzhou | 4 | 9you || 163 | hangzhou | 5 | 9you || 9you | shanghai | 5 | 9you || baidu | hangzhou | 5 | 9you || tx | hangzhou | 5 | 9you || 163 | hangzhou | 6 | tx || 9you | shanghai | 6 | tx || baidu | hangzhou | 6 | tx || tx | hangzhou | 6 | tx |+-------------+----------+----------+-------------+INNER JOIN联接(内联接)INNER JOIN比CROSS JOIN强大的一点在于,INNER JOIN可以根据一些过滤条件来匹配表之间的数据。在SQL逻辑查询语句执行的前三步中,INNER JOIN会执行第一步和第二步;即没有第三步,不添加外部行,这是INNER JOIN和接下来要说的OUTER JOIN的最大区别之一。现在来看看使用INNER JOIN来查询一下:select * from table1 inner join table2 on table1.customer_id=table2.customer_id;就会得到以下结果:+-------------+----------+----------+-------------+| customer_id | city | order_id | customer_id |+-------------+----------+----------+-------------+| 163 | hangzhou | 1 | 163 || 163 | hangzhou | 2 | 163 || 9you | shanghai | 3 | 9you || 9you | shanghai | 4 | 9you || 9you | shanghai | 5 | 9you || tx | hangzhou | 6 | tx |+-------------+----------+----------+-------------+对于INNER JOIN来说,如果没有使用ON条件的过滤,INNER JOIN和CROSS JOIN的效果是一样的。当在ON中设置的过滤条件列具有相同的名称,我们可以使用USING关键字来简写ON的过滤条件,这样可以简化sql语句,例如:select * from table1 inner join table2 using(customer_id);在实际编写sql语句时,我们都可以省略掉INNER关键字,例如:select * from table1 join table2 on table1.customer_id=table2.customer_id;但是,请记住,这还是INNER JOIN。OUTER JOIN联接(外联接)哦,记得有一次参加面试,还问我这个问题来着,那在这里再好好的总结一下。通过OUTER JOIN,我们可以按照一些过滤条件来匹配表之间的数据。OUTER JOIN的结果集等于INNER JOIN的结果集加上外部行;也就是说,在使用OUTER JOIN时,SQL逻辑查询语句执行的前三步,都会执行一遍。关于如何添加外部行,请参考《SQL逻辑查询语句执行顺序》这篇文章中的添加外部行部分内容。MySQL数据库支持LEFT OUTER JOIN和RIGHT OUTER JOIN,与INNER关键字一样,我们可以省略OUTER关键字。对于OUTER JOIN,同样的也可以使用USING来简化ON子句。所以,对于以下sql语句:select * from table1 left outer join table2 on table1.customer_id=table2.customer_id;我们可以简写成这样:select * from table1 left join table2 using(customer_id);但是,与INNER JOIN还有一点区别是,对于OUTER JOIN,必须指定ON(或者using)子句,否则MySQL数据库会抛出异常。NATURAL JOIN联接(自然连接)NATURAL JOIN等同于INNER(OUTER) JOIN与USING的组合,它隐含的作用是将两个表中具有相同名称的列进行匹配。同样的,NATURAL LEFT(RIGHT) JOIN等同于LEFT(RIGHT) JOIN与USING的组合。比如:select * from table1 join table2 using(customer_id);与select * from table1 natural join table2;等价。在比如:select * from table1 left join table2 using(customer_id);与select * from table1 natural left join table2;等价。STRAIGHT_JOIN联接STRAIGHT_JOIN并不是一个新的联接类型,而是用户对sql优化器的控制,其等同于JOIN。通过STRAIGHT_JOIN,MySQL数据库会强制先读取左边的表。举个例子来说,比如以下sql语句:explain select * from table1 join table2 on table1.customer_id=table2.customer_id;它的主要输出部分如下:+----+-------------+--------+------+---------------+| id | select_type | table | type | possible_keys |+----+-------------+--------+------+---------------+| 1 | SIMPLE | table2 | ALL | NULL || 1 | SIMPLE | table1 | ALL | PRIMARY |+----+-------------+--------+------+---------------+我们可以很清楚的看到,MySQL是先选择的table2表,然后再进行的匹配。如果我们指定STRAIGHT_JOIN方式,例如:explain select * from table1 straight_join table2 on table1.customer_id=table2.customer_id;上述语句的主要输出部分如下:+----+-------------+--------+------+---------------+| id | select_type | table | type | possible_keys |+----+-------------+--------+------+---------------+| 1 | SIMPLE | table1 | ALL | PRIMARY || 1 | SIMPLE | table2 | ALL | NULL |+----+-------------+--------+------+---------------+可以看到,当指定STRAIGHT_JOIN方式以后,MySQL就会先选择table1表,然后再进行的匹配。那么就有读者问了,这有啥好处呢?性能,还是性能。由于我这里测试数据比较少,大进行大量数据的访问时,我们指定STRAIGHT_JOIN让MySQL先读取左边的表,让MySQL按照我们的意愿来完成联接操作。在进行性能优化时,我们可以考虑使用STRAIGHT_JOIN。多表联接在上面的所有例子中,我都是使用的两个表之间的联接,而更多时候,我们在工作中,可能不止要联接两张表,可能要涉及到三张或者更多张表的联接查询操作。对于INNER JOIN的多表联接查询,可以随意安排表的顺序,而不会影响查询的结果。这是因为优化器会自动根据成本评估出访问表的顺序。如果你想指定联接顺序,可以使用上面总结的STRAIGHT_JOIN。而对于OUTER JOIN的多表联接查询,表的位置不同,涉及到添加外部行的问题,就可能会影响最终的结果。总结这是MySQL中联接操作的全部内容了,内容虽多,但是都还比较简单,结合文章中的例子,再自己实际操作一遍,完全可以搞定的。这一篇文章就这样了。

breakthrough myself的中文意思

突破自己

I can do tmis by myself 改为一般疑问句

can I do this by myself?

求神谷浩史For Myself罗马音和中文歌词

发送,查收

求神谷浩史的For Myself 中文歌词

笑う横颜や はしゃぐ声满面笑容的侧脸 欢闹的声音泣くほど喜ばせてみたい比起哭泣更想让你像这样开怀快乐そうして仆の幸せもそっと増えてゆく如此一来我的幸福也会随之增加全てはそう 君の为だなんて言えなくて无法明说这些全是为了你申し訳ないとは思うんだけど虽为此感到歉疚全てのそう 责任は自分で背负いたい但这全是自愿背负的责任后悔しても谁のせいにもしたくない即使后悔也不想怪罪他人そんなオトコなんですが我虽是这样的男人君を好きな気持ちは やたら本当喜欢你的心情却是相当确切的だから 君の幸せはいつだって所以 你的幸福不论何时仆が実现してあげる都由我来实现エラそうに言ってみたけどそれは这看似自大的发言仆の为でもある其实也是为了自己笑う横颜や はしゃぐ声满面笑容的侧脸 欢闹的声音泣くほど喜ばせてみたい比起哭泣更想让你像这样开怀快乐そうして仆の幸せもそっと増えてゆく如此一来我的幸福也会随之增加完璧じゃない仆と 一绪にいるのは和并非完美的我在一起的话いろいろ迷惑が かかるだろう肯定会给你添许多麻烦吧今までも大切な 仲间の支えに至今自己是因许多同伴的支持助けられてやっと ここまで来たんだ受到许多人的帮助才能有现在そんなオトコなんですが我虽是这样的男人君を守る决意は やたら强い守护你的心情却是相当坚定的だから 疲れた时にはいつだって所以 当你感到疲惫的时候仆が隣にいてあげる我随时都会在你身边エラそうに言ってみたけどそれは这看似自大的发言仆の为でもある其实也是为了自己寂しい瞳や 泣いた声寂寞的瞳眸 哭泣的声音どうにか笑っていて欲しい希望能让你露出笑容それは仆の笑颜にもきっと変わるから我的笑容一定也会随之有所改变だから 君の幸せはいつだって所以 你的幸福不论何时仆が実现してあげる都由我来实现エラそうに言ってみたけどそれは这看似自大的发言仆の为でもある其实也是为了自己笑う横颜や はしゃぐ声满面笑容的侧脸 欢闹的声音泣くほど喜ばせてみたい比起哭泣更想让你像这样开怀快乐そうして仆の幸せもそっと増えてゆく如此一来我的幸福也会随之增加 罗马笑う横颜や はしゃぐ声Warau yokogao ya Hashagu koe泣くほど喜ばせてみたいNaku hodo yorokobasete mitaiそして仆の幸せもそっと増えて行くSoshite boku no shiawase mo sotto fuete iku全てはそう 君の为だなんて言えなくてSubete wa sou Kimi no tame da nande ienakute申し訳ないとは思うんだけどMoushi wake nai to wa omou n da kedo全てのそう 责任は 自分で背负いたいSubete no sou Seki"nin wa Jibun de se oitai后悔しても谁のせいにもしたくないKoukai shite mo dare no sei ni mo shitakunaiそんなオトコなんですがSonna otoko nandesu ga君を好きな気持ちは やたら本当Kimi wo suki na kimochi wa Yatara hontouだから 君の幸せはいつだってDakara Kimi no shiawase wa itsu datte仆が実现してあげるBoku ga jitsugen shite ageruエラそうに言ってみだけどそれはErasou ni itte mi dakedo sore wa仆の为でもあるBoku no tame demo aru笑う横颜や はしゃぐ声Warau yokogao ya Hashagu koe泣くほど喜ばせてみたいNaku hodo yorokobasete mitaiそして仆の幸せもそっと増えて行くSoshite boku no shiawase mo sotto fuete iku完璧じゃない仆と 一绪にいるのはKanpeki janai boku to Issho ni iru no waいろいろ迷惑が かかるだろうIroiro meiwaku ga Kakaru darou今までも大切な 仲间の支えにIma made mo taisetsuna Nakama no sasae ni助けられてやっと ここまで来たんだTasukerarete yatto Koko made kita n daそんなオトコなんですがSonna otoko nandesu ga君を守る决意は やたら强いKimi wo mamoru ketsui wa yatara tsuyoiだから 疲れた时にはいつだってDakara Tsukareta toki ni wa itsu datte仆が隣にいてあげるBoku ga tonari ni ageruエラそうに言ってみだけどそれはErasou ni itte mi dakedo sore wa仆の为でもあるBoku no tame demo aru寂しい瞳や 泣いた声Sabishii hitomi ya Naita koeどうにか笑っていて欲しいDou ni ka waratte ite hoshiiそれは仆の笑颜にもきっと変わるからSore wa boku no egao ni mo kitto kawaru karaだから 君の幸せはいつだってDakara Kimi no shiawase wa itsu datte仆が実现してあげるBoku ga jitsugen shite ageruエラそうに言ってみだけどそれはErasou ni itte mi dakedo sore wa仆の为でもあるBoku no tame demo aru笑う横颜や はしゃぐ声Warau yokogao ya Hashagu koe泣くほど喜ばせてみたいNaku hodo yorokobasete mitaiそして仆の幸せもそっと増えて行くSoshite boku no shiawase

神谷浩史《for myself》罗马音

For Myself 神谷浩史作词:渡边亜希子作曲·编曲:坂垣佑介笑う横颜や はしゃぐ声Warau yokogao ya Hashagu koe泣くほど喜ばせてみたいNaku hodo yorokobasete mitaiそして仆の幸せもそっと増えて行くSoshite boku no shiawase mo sotto fuete iku全てはそう 君の为だなんて言えなくてSubete wa sou Kimi no tame da nande ienakute申し訳ないとは思うんだけどMoushi wake nai to wa omou n da kedo全てのそう 责任は 自分で背负いたいSubete no sou Seki"nin wa Jibun de se oitai后悔しても谁のせいにもしたくないKoukai shite mo dare no sei ni mo shitakunaiそんなオトコなんですがSonna otoko nandesu ga君を好きな気持ちは やたら本当Kimi wo suki na kimochi wa Yatara hontouだから 君の幸せはいつだってDakara Kimi no shiawase wa itsu datte仆が実现してあげるBoku ga jitsugen shite ageruエラそうに言ってみだけどそれはErasou ni itte mi dakedo sore wa仆の为でもあるBoku no tame demo aru笑う横颜や はしゃぐ声Warau yokogao ya Hashagu koe泣くほど喜ばせてみたいNaku hodo yorokobasete mitaiそして仆の幸せもそっと増えて行くSoshite boku no shiawase mo sotto fuete iku完璧じゃない仆と 一绪にいるのはKanpeki janai boku to Issho ni iru no waいろいろ迷惑が かかるだろうIroiro meiwaku ga Kakaru darou今までも大切な 仲间の支えにIma made mo taisetsuna Nakama no sasae ni助けられてやっと ここまで来たんだTasukerarete yatto Koko made kita n daそんなオトコなんですがSonna otoko nandesu ga君を守る决意は やたら强いKimi wo mamoru ketsui wa yatara tsuyoiだから 疲れた时にはいつだってDakara Tsukareta toki ni wa itsu datte仆が隣にいてあげるBoku ga tonari ni ageruエラそうに言ってみだけどそれはErasou ni itte mi dakedo sore wa仆の为でもあるBoku no tame demo aru寂しい瞳や 泣いた声Sabishii hitomi ya Naita koeどうにか笑っていて欲しいDou ni ka waratte ite hoshiiそれは仆の笑颜にもきっと変わるからSore wa boku no egao ni mo kitto kawaru karaだから 君の幸せはいつだってDakara Kimi no shiawase wa itsu datte仆が実现してあげるBoku ga jitsugen shite ageruエラそうに言ってみだけどそれはErasou ni itte mi dakedo sore wa仆の为でもあるBoku no tame demo aru笑う横颜や はしゃぐ声Warau yokogao ya Hashagu koe泣くほど喜ばせてみたいNaku hodo yorokobasete mitaiそして仆の幸せもそっと増えて行くSoshite boku no shiawase mo sotto fuete iku笑う横颜や はしゃぐ声满面笑容的侧脸 欢闹的声音泣くほど喜ばせてみたい比起哭泣更想让你像这样开怀快乐そうして仆の幸せもそっと増えてゆく如此一来我的幸福也会随之增加全てはそう 君の为だなんて言えなくて无法明说这些全是为了你申し訳ないとは思うんだけど虽为此感到歉疚全てのそう 责任は自分で背负いたい但这全是自愿背负的责任后悔しても谁のせいにもしたくない即使后悔也不想怪罪他人そんなオトコなんですが我虽是这样的男人君を好きな気持ちは やたら本当喜欢你的心情却是相当确切的だから 君の幸せはいつだって所以 你的幸福不论何时仆が実现してあげる都由我来实现エラそうに言ってみたけどそれは这看似自大的发言仆の为でもある其实也是为了自己笑う横颜や はしゃぐ声满面笑容的侧脸 欢闹的声音泣くほど喜ばせてみたい比起哭泣更想让你像这样开怀快乐そうして仆の幸せもそっと増えてゆく如此一来我的幸福也会随之增加完璧じゃない仆と 一绪にいるのは和并非完美的我在一起的话いろいろ迷惑が かかるだろう肯定会给你添许多麻烦吧今までも大切な 仲间の支えに至今自己是因许多同伴的支持助けられてやっと ここまで来たんだ受到许多人的帮助才能有现在そんなオトコなんですが我虽是这样的男人君を守る决意は やたら强い守护你的心情却是相当坚定的だから 疲れた时にはいつだって所以 当你感到疲惫的时候仆が隣にいてあげる我随时都会在你身边エラそうに言ってみたけどそれは这看似自大的发言仆の为でもある其实也是为了自己寂しい瞳や 泣いた声寂寞的瞳眸 哭泣的声音どうにか笑っていて欲しい希望能让你露出笑容それは仆の笑颜にもきっと変わるから我的笑容一定也会随之有所改变だから 君の幸せはいつだって所以 你的幸福不论何时仆が実现してあげる都由我来实现エラそうに言ってみたけどそれは这看似自大的发言仆の为でもある其实也是为了自己笑う横颜や はしゃぐ声满面笑容的侧脸 欢闹的声音泣くほど喜ばせてみたい比起哭泣更想让你像这样开怀快乐そうして仆の幸せもそっと増えてゆく如此一来我的幸福也会随之增加

MySQL的CASEWHEN语句的几个使用实例_MySQL

使用CASE WHEN进行字符串替换处理mysql> select * from sales;9 rows in set (0.01 sec)SELECT name AS Name, CASE category WHEN "Holiday" THEN "Seasonal" WHEN "Profession" THEN "Bi_annual" WHEN "Literary" THEN "Random" END AS "Pattern"FROM sales; 9 rows in set (0.00 sec)CREATE TABLE sales( num MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(20), winter INT, spring INT, summer INT, fall INT, category CHAR(13), primary key(num)) ENGINE=MyISAM;insert into sales value(1, "Java", 1067 , 200, 150, 267,"Holiday");insert into sales value(2, "C",970,770,531,486,"Profession");insert into sales value(3, "JavaScript",53,13,21,856,"Literary");insert into sales value(4, "SQL",782,357,168,250,"Profession");insert into sales value(5, "Oracle",589,795,367,284,"Holiday");insert into sales value(6, "MySQL",953,582,336,489,"Literary");insert into sales value(7, "Cplus",752,657,259,478,"Literary");insert into sales value(8, "Python",67,23,83,543,"Holiday");insert into sales value(9, "PHP",673,48,625,52,"Profession");简单语句SELECT CASE WHEN 10*2=30 THEN "30 correct" WHEN 10*2=40 THEN "40 correct" ELSE "Should be 10*2=20"END AS `result`;多重表达式SELECT CASE 10*2 WHEN 20 THEN "20 correct" WHEN 30 THEN "30 correct" WHEN 40 THEN "40 correct" ELSE "No results"END AS `result`;在SELECT查询中使用CASE WHENCREATE TABLE DVDs ( ID SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(60) NOT NULL, NumDisks TINYINT NOT NULL DEFAULT 1, RatingID VARCHAR(4) NOT NULL, StatID CHAR(3) NOT NULL) ENGINE=INNODB;INSERT INTO DVDs (Name, NumDisks, RatingID, StatID)VALUES ("Christmas", 1, "NR", "s1"), ("Doc", 1, "G", "s2"), ("Africa", 1, "PG", "s1"), ("Falcon", 1, "NR", "s2"), ("Amadeus", 1, "PG", "s2"), ("Show", 2, "NR", "s2"), ("View", 1, "NR", "s1"), ("Mash", 2, "R", "s2");SELECT Name, RatingID AS Rating, CASE RatingID WHEN "R" THEN "Under 17 requires an adult." WHEN "X" THEN "No one 17 and under." WHEN "NR" THEN "Use discretion when renting." ELSE "OK to rent to minors." END AS PolicyFROM DVDsORDER BY Name;8 rows in set (0.01 sec)

MySQL语句中如何灵活对if例子进行运用

以下的文章主要描述的是MySQL语句中如何用if例子的实际操作步骤,我们先是以相关代码的方式来引出MySQL语句中如何用if例子的实际操作,以下就是文章的具体操作内容的描述,望你会有所收获。 *,if( sva = 1 ,男,女)asssvafromtanamewheresva 12.2. 控制流程函以下的文章主要描述的是MySQL语句中如何用if例子的实际操作步骤,我们先是以相关代码的方式来引出MySQL语句中如何用if例子的实际操作,以下就是文章的具体操作内容的描述,望你会有所收获。*,if(sva=1,"男","女") as ssva from taname where sva"" 12.2. 控制流程函数CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。MySQL(和PHP搭配之最佳组合)> SELECT CASE 1 WHEN 1 THEN "one" -> WHEN 2 THEN "two" ELSE "more" END; -> "one" MySQL(和PHP搭配之最佳组合)> SELECT CASE WHEN 1>0 THEN "true" ELSE "false" END; -> "true" MySQL(和PHP搭配之最佳组合)> SELECT CASE BINARY "B" -> WHEN "a" THEN 1 WHEN "b" THEN 2 END; -> NULL 一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果味字符串。如果用在数字语境中,则返回结果为十进制值、实值或整数值。IF(expr1,expr2,expr3) 如果 expr1 是TRUE (expr10 and expr1NULL),则 MySQL语句中用ifIF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。MySQL(和PHP搭配之最佳组合)> SELECT IF(1>2,2,3); -> 3 MySQL(和PHP搭配之最佳组合)> SELECT IF(1 "yes" MySQL(和PHP搭配之最佳组合)> SELECT IF(STRCMP("test","test1"),"no","yes"); -> "no" 如果expr2 或expr3中只有一个明确是 NULL,则MySQL语句中用ifIF() 函数的结果类型 为非NULL表达式的结果类型。expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。MySQL(和PHP搭配之最佳组合)> SELECT IF(0.1,1,0); -> 0 MySQL(和PHP搭配之最佳组合)> SELECT IF(0.10,1,0); -> 1 在所示的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比较结果使用整数。MySQL语句中用ifIF() (这一点在其被储存到临时表时很重要 ) 的默认返回值类型按照以下方式计算:表达式返回值expr2 或expr3 返回值为一个字符串。字符串expr2 或expr3 返回值为一个浮点值。浮点expr2 或 expr3 返回值为一个整数。整数假如expr2 和expr3 都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。http://blog.knowsky.com/IFNULL(expr1,expr2)假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。MySQL(和PHP搭配之最佳组合)> SELECT IFNULL(1,0); -> 1 MySQL(和PHP搭配之最佳组合)> SELECT IFNULL(NULL,10); -> 10 MySQL(和PHP搭配之最佳组合)> SELECT IFNULL(1/0,10); -> 10 MySQL(和PHP搭配之最佳组合)> SELECT IFNULL(1/0,"yes"); -> "yes" IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、 REAL或 INTEGER。假设一个基于表达式的表的情况, 或MySQL(和PHP搭配之最佳组合)必须在内存储器中储存一个临时表中MySQL语句中用ifIFNULL()的返回值:CREATE TABLE tmp SELECT IFNULL(1,"test") AS test;在这个例子中,测试列的类型为 CHAR(4)。NULLIF(expr1,expr2)如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。MySQL(和PHP搭配之最佳组合)> SELECT NULLIF(1,1); -> NULL MySQL(和PHP搭配之最佳组合)> SELECT NULLIF(1,2); -> 1 注意,如果参数不相等,则 MySQL(和PHP搭配之最佳组合) 两次求得的值为 expr1 。

nutch 2.3不再支持MySQL数据库了吗

支持Mysql 刚安装,里面有mysql的文件,上去直接装,配置一下,就搞定了,虽然不是大蛋糕,但是也是市场需求啊,他们应该是不会放弃的,你是不是哪里安装出错了,可以发出来看下。

MySQL数据库如何实现双机热备的配置成功方案.doc

搞定MySQL双机备份为了数据的安全,客户有两台机器作为互相备份,当一台机器出现故障时,自动切换到另外一台服务器。大部分的软件我们是通过LifeKeeper来实现的,但是MySQL的双机备份在LifeKeeper里没有实现,看来,只有我手动来实现MySQL的双机备份了哦。先说说环境QUOTE:操作系统:windows 2003 serverMySQL版本:v4.1互备数据库:bbsServer1:10.2.2.3Server2:10.2.2.4其实,MySQL的双机备份有一个很简单的第三方软件可以实现,那就是SQLyog (http://www.webyog.com/),他有一个功能叫sja(SQLyog Job Agent ,http://www.webyog.com/sqlyog/sja.html),可以轻松实现,但是却有一个不足,那就是MySQL表里必须有一个primary key,如果没有,则此表不能用sja来实现。我查看了一下,我们需要互备的数据中就有两三个表没有primary key,看来要放弃这个方法了。第二种方法就是用MySQL自身的Replication机制来实现了。据说MySQL 3.23以上的版本都有此功能。下面来说说具体的步骤。1)先在每台服务器上各安装好mysql,保证正常运行,在Mysql的安装目录里各建立一个目录logs,如F:Mysql4.1logs,供后面步骤使用。2)将要互备的初始化数据在每台服务器上各导入一份,且保持两台服务器要互备的初始化数据一致。这个步骤很重要。3)在每个server上各增加一个备份用户,且赋予一定的权限。3.1)在Server1上QUOTE:GRANTREPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@‘10.2.2.4‘ IDENTIFIED BY‘123456‘;之后立即在Server2上用如下命令来测试backup用户是否能连接上Server1QUOTE:F:Mysql4.1inmysql.exe-h10.2.2.3 -ubackup -p123456如果能连接上,表明互备帐户增加OK!3.2)重复上述动作,在Server2上QUOTE:GRANTREPLICATION SLAVE,RELOAD,SUPER ON *.* TO backup@‘10.2.2.3‘ IDENTIFIED BY‘123456‘;之后立即在Server1上用如下命令来测试backup用户是否能连接上Server2QUOTE:F:Mysql4.1inmysql.exe-h10.2.2.4 -ubackup -p123456如果能连接上,表明互备帐户增加OK!4)修改mysql配置文件,增加互备参数配置。4.1)停掉server1的mysql,修改my.ini,在[mysqld]区域内增加如下信息:QUOTE:######################################################MySQL的双机备份,bylongware,2006-05-26server-id=1log-bin=F:/MySQL4.1/logs/syncmaster-host=10.2.2.4master-user=backupmaster-password=123456master-port=3306master-connect-retry=60replicate-do-db=bbs#####################################################保存并关闭my.ini文件,重启mysql服务,观察logs目录下面有没有类似sync.000001、sync.index的文件生成,观察data目录里有没有*.info、*-relay-bin.000001、*-relay-bin.index的文件生成,如果两个目录都有,说明互备参数配置正确。4.2)停掉server2的mysql,修改my.ini,在[mysqld]区域内增加如下信息:QUOTE:######################################################MySQL的双机备份,bylongware,2006-05-26server-id=2log-bin=F:/MySQL4.1/logs/syncmaster-host=10.2.2.3master-user=backupmaster-password=123456master-port=3306master-connect-retry=60replicate-do-db=bbs#####################################################保存并关闭my.ini文件,重启mysql服务,观察logs目录下面有没有类似sync.000001、sync.index的文件生成,观察data目录里有没有*.info、*-relay-bin.000001、*-relay-bin.index的文件生成,如果两个目录都有,说明互备参数配置正确。4.3)如果没有看到上步中说的文件,说明配置文件没有起作用,请检查mysql配置文件的位置,很可能在c:windows下面,也可能在C:Documents and SettingsAdministratorwindows下面,还可能在F:Mysql4.1下面,具体要看您的mysql服务的启动参数,您可以去windows的“开始-控制面板-管理工具-服务”中,双击mysql的服务名称,查看”可执行文件的路径“项的值,如果是QUOTE:F:/mysql4.1/bin/mysqld-nt.exe则my.ini可能就在c:windows下面,如果是QUOTE:"F:MySQL4.1inmysqld-nt"--defaults-file="F:MySQL4.1my.ini" MySQL则my.ini就在F:MySQL4.1下面。我的一个朋友就因为没有搞清楚my.ini的位置,折腾了大半天也每搞定。5)分别停掉两台机器的mysql服务,再次确保两台机器的要互备的初始化数据一致,删除logs下面的文件,删除data下面的非目录文件,确保网络畅通,再分别启动server1和server2的mysql服务,mysql双机互备成功了。6)互备测试,在server1里的bbs数据库里建一张表,插几条数据,再登陆到server2里,看看数据是否存在,存在表明OK。7)注意:两台机器的mysql互备的初始化数据要相同。如果要单向备份,将其中的一台服务器的my.ini的互备配置注释掉重启即可。8)官方参考资料:http://dev.mysql.com/doc/refman/5.1/en/ndbcluster.htmlhttp://dev.mysql.com/doc/refman/ ...er-replication.html日志抓取和数据载入(REPLICATIONSLAVE,REPLICATIONCLIENT)MySQL手册版本 5.0.20-MySQL同步(二)发布于:2006-8-15 17:10:51 已被阅读: 247 6.4 设置同步 以下描述了如何快速设置MySQL同步服务器。假设你打算同步全部的数据库,并且之前没有设置过。需要关闭master服务器以完成全部的步骤。 本章描述的过程可以用于一个slave的情况,也可以用于多个slave的情况。 这只是一个最直接设置slave的办法,并不是只有一个。例如,已经有了master的数据快照(snapshot),master已经设置了服务器编号ID(server_id)并且启用了二进制日志,这就无需关闭master或者阻止在master上更新数据了。详情请看"6.9 Replication FAQ"。 想要完全掌握MySQL同步设置,最好把本章全部读完,并且测试在"14.6.1 SQL Statements for Controlling Master Servers"和"14.6.2 SQL Statements for Controlling Slave Servers"中提到的全部语句。而且要熟悉各种同步设置选项,详情请看"6.8 Replication Startup Options"。 注意,这个过程以及后面一些同步SQL语句需要有 SUPER 权限。MySQL 4.0.2以前,则是 PROCESS 权限。 请确认master和slave上都安装了较近的MySQL版本,且这些版本之间要能兼容,在"6.5 Replication Compatibility Between MySQL Versions"中列出来了。请确认在最新版本中还有存在问题,否则不要报告该bug。 在master上新加一个帐户,slave才能用它来连接。这个帐户必须授予 REPLICATION SLAVE 权限。如果这个帐户只用于同步(推荐这么做),那就没必要授予其他权限了。设定你的域是 mydomain.com,想要授权一个帐户 repl 使用密码 slavepass,允许它可以在域里的任何主机连接到master上。用 GRANT 语句来创建帐户: mysql> GRANT REPLICATION SLAVE ON *.* -> TO ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘; 在MySQL 4.0.2以前,用 FILE 权限来代替 REPLICATION SLAVE: mysql> GRANT FILE ON *.* -> TO ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘; 如果打算在slave上执行 LOAD TABLE FROM MASTER 或 LOAD DATA FROM MASTER 语句,那么必须给该帐户授予附加权限: 授予全局 SUPER 和 RELOAD 权限。 授予对想要加载的所有表上的 SELECT 权限。在master上任何没有 SELECT 权限的表都会被 LOAD DATA FROM MASTER 略过。 如果只用到 MyISAM 表,执行 FLUSH TABLES WITH READ LOCK 语句刷新所有表并且阻止其他写入: mysql> FLUSH TABLES WITH READ LOCK; 不要退出执行 FLUSH TABLES 语句的客户端,以保持读锁有效(如果退出了,读锁就释放了)。然后从master上取得数据快照。比较简单的办法就是把数据目录打包压缩。例如,Unix上的 tar, PowerArchiver, WinRAR, WinZip,或Windows上的类似程序。想要用 tar 来创建一个压缩包,包括所有的数据库,只需执行以下命令(把目录改成你的真实路径): shell> tar -cvf /tmp/mysql-snapshot.tar . 如果只想打包一个数据库 this_db,只需执行命令: shell> tar -cvf /tmp/mysql-snapshot.tar ./this_db 然后把这个文件拷贝到slave的 `/tmp` 目录下。在slave上,执行以下命令解开压缩包(把目录改成你的真实路径): shell> tar -xvf /tmp/mysql-snapshot.tar 可能不需要同步 mysql 数据库,因为在slave上的权限表和master不一样。这时,解开压缩包的时候要排除它。同时在压缩包中也不要包含任何日志文件,或者 `master.info~ 或 `relay-log.info` 文件。当在master上的 FLUSH TABLES WITH READ LOCK 语句还生效时,在master上读取当前二进制文件的文件名及偏移位置: mysql > SHOW MASTER STATUS; +---------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +---------------+----------+--------------+------------------+| mysql-bin.003 | 73 | test | manual,mysql | +---------------+----------+--------------+------------------+File 字段显示了二进制日志文件名,Position 字段显示了日志偏移位置。在这个例子中,日志文件是 mysql-bin.003,偏移位置是 73。记下这些值,在后面设置slave的时候就需要用到它们了。它们表示了slave要从master的哪个偏移位置开始处理更新操作。取得快照和记录下日志名及偏移位置后,就可以让master释放读锁了: mysql> UNLOCK TABLES; 如果用到 InnoDB 表,那么最好使用 InnoDB Hot Backup 工具。它无需在master上请求任何锁就能做到快照的一致性,并且在后面中在slave上要用到的快照中已经记录了日志文件名以及偏移位置。InnoDB Hot Backup 是费免费(商业的)的附加工具,它没有包含在MySQL发布包中。访问 InnoDB Hot Backup 的主页 http://www.innodb.com/manual.php 查看更多详细信息。除去 InnoDB Hot Backup 的另一个最快的办法就是关闭master服务器,拷贝 InnoDB 数据文件,日志文件,以及表结构定义文件(`.frm` 文件)。想要记录当前日志文件及偏移位置,需要在master关闭前执行如下可语句: mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; 尽快记下 SHOW MASTER STATUS 显示结果中的日志文件及偏移位置。然后,在不解锁的情况下关闭master,确保master上的快照和记录的结果一致: shell> mysqladmin -u root shutdown 还有一个方法可以同时用于 MyISAM 和 InnoDB 表,这就是在master上作SQL转储而无需如上所述备份二进制日志。在master上运行 mysqldump --master-data 命令,然后把结果文件转储到slave上。不过,这比拷贝二进制日志慢点。如果master在以前没有启用 --log-bin 选项,那么执行 SHOW MASTER STATUS 语句的结果中的文件名及偏移位置值为空了,那么后面在slave上指定的参数值就是空字符串(‘‘) 和 4了。 确认master上的 `my.cnf` 文件 [mysqld] 区间有 log-bin 选项。这个区间还必须有 server-id=master_id 选项,的值必须是 1 到 2^32-1 之间的正整数。例如: [mysqld] log-bin server-id=1如果这些配置选项不存在,那么就加上并且重启master。 关闭要做slave的服务器,在 `my.cnf` 文件中增加如下选项: [mysqld] server-id=slave_idslave_id 的值和 master_id 类似,是 1 到 2^32-1 之间的正整数。另外,这个ID必须不能和master的ID一样。例如: [mysqld] server-id=2如果有多个slave,那么每个slave都必须要有一个唯一的 server-id,它的值不能和master以及其其他slave的值一样。可以把 server-id 想象成为IP地址:这些ID标识了整个同步组合中的每个服务器。如果没有指定 server-id 的值,如果也没定义 master-host,那么它的值就为1,否则为2。注意,如果没有设定 server-id,那么master就会拒绝所有的slave连接,同时slave也会拒绝连接到master上。因此,省略配置 server-id 只对备份二进制日志有利。 如果已经备份了master上的数据(直接打包压缩的方式),那么在slave启动之前把它们拷贝过去。要确保文件的权限属主等设置没问题。MySQL运行的用户必须对这些文件有读写权限,就跟在master上一样。如果是用 mysqldump 备份的,那么可以直接启动salve(直接跳到下一步)。 启动slave,如果它之前已经运行同步了,那么在启动slave的时候使用 --skip-slave-start 选项使之不会立刻去连接master。最好也使用 --log-warnings 选项(从 MySQL 4.0.19 和 4.1.2 开始就是默认启用了)来启动slave,以知道发生问题时的更详细的信息(例如,网络或者连接问题)。从开始MySQL 4.0.21 和 4.1.3,异常中止的连接不再记录到错误日志中,除非 --log-warnings 选项的值大于1。 如果在master上用 mysqldump 备份数据的话,把文件导入slave中: shell> mysql -u root -p < dump_file.sql 在slave上执行如下语句,把各个选项的值替换成真实值: mysql> CHANGE MASTER TO -> MASTER_HOST=‘master_host_name‘, -> MASTER_USER=‘replication_user_name‘, -> MASTER_PASSWORD=‘replication_password‘, -> MASTER_LOG_FILE=‘recorded_log_file_name‘, -> MASTER_LOG_POS=recorded_log_position; 下表列出了各个选项字符串的最大长度: MASTER_HOST 60 MASTER_USER 16 MASTER_PASSWORD 32 MASTER_LOG_FILE 255 启动slave线程: mysql> START SLAVE; 做完上述过程后,slave应该会连接到master上并且捕获所有从取得快照后的更新操作。 如果忘了设置master的 server-id 值,那么slave就不能连接到master上。 如果忘了设置master的 server-id 值,那么在错误日志中就会记录如下内容: Warning: You should set server-id to a non-0 value if master_host is set; we force server id to 2, but this MySQL server will not act as a slave. 如果因为其他原因不能同步的话,错误信息也会记录在slave的日志上。 一旦slave开始同步了,就能在数据文件目录下找到2个文件 `master.info` 和`relay-log.info`。slave利用这2个文件来跟踪处理了多少master的二进制日志。 不要删除或者修改这2个文件,除非知道怎么改。尽管如此,我们更推荐用 CHANGE MASTER TO 语句来做。 注意:`master.info` 中的内容覆盖了部分命令行中指定的或 `my.cnf` 的选项。详情请看"6.8 Replication Startup Options"。
 首页 上一页  1 2 3 4 5 6 7 8 9  下一页  尾页