MySQL 有些公司的网站负责人朋友刚接触到公司业务。对linux 还不是很熟悉 对网站的数据库无法进行备份。 今天给大家分享下 、 1.MySQL的登录命令 登录Mysql输入:mysql -u帐号 -p密码 注:密码可以之后输入 案例: mysql -uroot -p 2.MySQL退出的三种方法 exit / quti / \q 数据库备份 show databases; #先查看一下数据库 现在我要备份word数据库 退出mysql输入 mysqldump -u root -p word > word.sql #我把它备份在了当前目录下 查看一下 备份完成 还原数据库 mysqldump -u root -p word < word.sql 以上就是我们的数据库备份恢复命令使用分享。
前沿 今天通过ECS对阿里云rds数据库进行导入。一直报错。 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation 我们也在其他RDS上 导入多次都是没问题的。一直报错权限不足。。最后查询资料 是阿里云目前RDS不提供SUPER权限。 错误信息 mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1227 (42000) at line 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation 出现场景 阿里云RDS 错误原因 导RDS for MySQL实例时,SQL语句中含有需要Supper权限才可以执行的语句,而RDS for MySQL不提供Super权限,因此需要去除这类语句。 本地MySQL实例没有启用GTID。 解决办法 去除DEFINER子句: 检查SQL文件,去除下面类似的子句。 DEFINER=`root`@`%` 在Linux平台下,可以尝试使用下面的语句去除。 sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/ ' your.sql > your_revised.sql 去除GTID_PURGED子句 检查SQL文件,去除下面类似的子句。 SET @@GLOBAL.GTID_PURGED='d0502171-3e23-11e4-9d65-d89d672af420:1-373, d5deee4e-3e23-11e4-9d65-d89d672a9530:1-616234'; 在Linux平台下,可以尝试使用下面的语句去除。 awk '{ if (index($0,"GTID_PURGED")) { getline; while (length($0) > 0) { getline; } } else { print...
【腾讯云】2核2G云服务器新老同享 99元/年,续费同价,云服务器3年机/5年机限时抢购,低至 2.5折
2024-12-21
今天看到一个案例:数据库服务无法启动,也导致了不能备份数据库、所以只能使用了笨方法、直接打包DATA目录 我们的服务器是宝塔环境、 直接备份 /www/server/data 这个目录备份 下载下来 在新的服务器上安装好环境、把data压缩包上传上去、进行解压覆盖、注意的是 版本最好一样。 重启一下数据库、 [root@VM_166_22_centos data]# /etc/init.d/mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS! 1:登录phpmyadmin测试效果。点开数据库表 居然报错了 这个是因为是innoDB 的引擎 。好像这种方式不行。mmp 那么逼我放大招了。 先把data目录删除 就是/www/server/data 这个目录 [root@VM_166_22_centos]# rm -rf /wwww/server/data/ 删除两个日志文件 [root@VM_166_22_centos data]# rm -rf ib_logfile* 激动人心的时刻到了 [root@VM_166_22_centos data]# /etc/init.d/mysqld start 如果启动失败 就用 修复的命令如下: wget -O sql-repair.sh http://download.bt.cn/install/sql-repair.sh && sh sql-repair.sh 执行这个命令之前。需要删除 data 目录下的两个log rm -rf ib_logfile* 最后数据库进来了 。完事了。。
本文主要讲述了在在linux系统下启动 mysql数据库操作,感兴趣的朋友可以了解一下。 {mysql}表示mysql的安装目录 如何启动/停止/重启MySQL 一、启动方式 1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start 如果/etc/inint.d/下找不到mysqld,可以去mysql安装目录,{mysql}/init.d/mysqld start 3、使用 safe_mysqld 启动:safe_mysqld& 二、停止 1、使用 service 启动:service mysqld stop 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop 如果/etc/inint.d/下找不到mysqld,可以去mysql安装目录,{mysql}/init.d/mysqld stop 3、mysqladmin shutdown 三、重启 1、使用 service 启动:service mysqld restart 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart 如果/etc/inint.d/下找不到mysqld,可以去mysql安装目录,{mysql}/init.d/mysqld restart 提问 编辑摘要 如何启动/停止/重启MySQL 一、启动方式 1、使用 service 启动:service mysqld start 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start 3、使用 safe_mysqld 启动:safe_mysqld& 二、停止 1、使用 service 启动:service mysqld stop 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop 3、mysqladmin shutdown 三、重启 1、使用 service 启动:service mysqld restart 2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart 刚开始学mysql时都是用redhat自带的。启动是什么 /rc.d/init.d/ start 这很简单,但是后来越学越多,系统自带的mysql,有的是版本太低,有的是与 自己想要装的web服务需要的低版本的mysql 后来自己学着以tar的方式安装mysql,我的mysql装在/usr/local/mysql目录下启 动碰到过很多问题。最常见的是: ERROR 2002: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (111) 解决办法: [root@test mysql]# /usr/local/mysql/bin/mysqladmin -u root / > -S /var/lib/mysql/mysql.sock password ‘your.passwd’ 或者做个连接 ln -s /var/lib/mysql/mysql.sock /tmp 其实提示找不到...
本篇文章的主要内容是关于在mysql数据库explain中的using where和using index的使用,感兴趣的朋友可以了解一下。 1. 查看表中的所有索引 show index from modify_passwd_log; 有两个 一个是id的主键索引 , 一个是email_id的普通索引 2. using index表示 使用到了索引 , 并且所取的数据完全在索引中就能拿到 explain select email_id from modify_passwd_log where email_id=670602; 3. type是ref,where是空白:使用到了索引,但是查询的数据有没在索引中的,回表去拿数据了 explain select * from modify_passwd_log where email_id=670602; 4. type是ref , where是 using where ,表示使用到了索引 , 但是也进行了where过滤 推荐课程:mysql视频教程 以上就是在MySQL中的explain中的using where和using index的详细内容,更多请关注php中文网其它相关文章!
数据库中schema是数据库对象集合,它包含了表,视图等多种对象。schema就像是用户名,当访问数据表时未指明属于哪个schema,系统就会自动的加上缺省的schema 我们在学习数据库中会碰到一个模糊的概念,它就是Schema。很多人对他都不是很了解,今天将要在文章中为大家详细介绍这个概念,具有一定的参考作用,希望对大家有所帮助。 【推荐课程:数据库教程】 Schema概念 schema在数据库中表示的是数据库对象集合,它包含了各种对像,比如:表,视图,存储过程,索引等等。一般情况下一个用户对应一个集合,所以为了区分不同的集合就需要给不同的集合起名字。用户的schema名就相当于用户名,并作为该用户缺省schema。所以说schema集合看上去像用户名。例如当我们访问一个数据表时,如果该表没有指明属于哪个schema,系统就会自动的加上缺省的schema。 Schema的创建 需要注意的是,在不同的数据库中要创建的Schema方法是不一样的,但是它们有一个共同的特点就是都支持CREATE SCHEMA语句 MySQL 在MySQL数据库中,我们可以通过CREATE SCHEMA语句来创建一个数据库 Oracle Database 在Oracle中,由于数据库用户已经创建了一个模式,所以CREATE SCHEMA语句创建的是一个schema,它允许将schema同表和视图关联起来,并在这些对象上真奇葩,原来授权,从而不必在多个事务中发出多个SQL语句。 SQL Server 在SQL Server中,CREATE SCHEMA会按照名称来创建一个模式,与MySQL不同,CREATE SCHEMA语句创建了一个单独定义到数据库的模式。和Oracle数据库也有不同,它实际上创建了一个模式,而且一旦创建了模式,就可以往模式中添加用户和对象。 总结:以上就是本篇文章的全部内容了,希望对大家有所帮助 以上就是数据库中的Schema是什么?的详细内容,更多请关注php中文网其它相关文章!
最近对php查询mysql处理结果集的几个方法不太明白的地方查阅了资料,在此整理记下(相关推荐:mysql教程) Php使用mysqli_result类处理结果集有以下几种方法 fetch_all() 抓取所有的结果行并且以关联数据,数值索引数组,或者两者皆有的方式返回结果集。 fetch_array() 以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果。 fetch_object() 以对象返回结果集的当前行。 fetch_row() 以枚举数组方式返回一行结果 fetch_assoc() 以一个关联数组方式抓取一行结果。 fetch_field_direct() 以对象返回结果集中单字段的元数据。 fetch_field() 以对象返回结果集中的列信息。 fetch_fields() 以对象数组返回代表结果集中的列信息。 fetch_all (从结果集中取得所有行作为关联数组) $sql="select * from user"; $result=$link->query($sql); $row=$result->fetch_all(MYSQLI_BOTH);//参数MYSQL_ASSOC、MYSQLI_NUM、MYSQLI_BOTH规定产生数组类型 $n=0; while($n<mysqli_num_rows($result)){ echo "ID:".$row[$n]["id"]."用户名:".$row[$n]["name"]."密码:".$row[$n]["password"]."<br />"; $n++; } fetch_array (以一个关联数组,数值索引数组,或者两者皆有的方式抓取一行结果) $sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_array()){ echo "ID:".$row["id"]."用户名:".$row[1]."密码:".$row["password"]."<br />"; } //fetch_array方法不再有结果时返回返回NULL //其返回结果可以是关联数组也可以是数值数组索引,故$row["id"]、$row[1]都可以 fetch_object (以对象返回结果集的当前行) $sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_object()){ echo "ID:".$row->id."用户名:".$row->name."密码:".$row->password."<br />"; } //如果无更多的行则返回NULL //返回的结果是对象,要以对象的方式调用 fetch_row (以枚举数组方式返回一行结果) $sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_row()){ echo "ID:".$row[0]."用户名:".$row[1]."密码:".$row[2]."<br />"; } //无更多行时返回NULL //以数值下标调用数组,a[0]正确、a["id"]则不 fetch_assoc (以一个关联数组方式抓取一行结果) $sql="select * from user"; $result=$link->query($sql); while($row=$result->fetch_assoc()){ echo "ID:".$row["id"]."用户名:".$row["name"]."密码:".$row["password"]."<br />"; } //无更多行时返回NULL //以关联索引访问数组,a["id"]正确、a[0]则不 fetch_field_direct (以对象返回结果集中单字段的元数据既单列的信息) $sql="select * from user"; $result=$link->query($sql); $n=0; while(1){ if(!$row=$result->fetch_field_direct($n++)) break; echo "列名:".$row->name."所在表:".$row->table."数据类型:".$row->type."<br />"; } //fetch_field_direct($n)只返回单个列,所以得不断调用该方法,没有该列时返回false fetch_field (以对象返回结果集中的列信息) $sql="select * from user";...
本文的主要内容是讲述在MySQL 5.7上使用group by语句出现1055错误的问题分析以及解决办法,有需要的朋友可以看一下。 1. 在5.7版本以上mysql中使用group by语句进行分组时, 如果select的字段 , 不是完全对应的group by后面的字段 , 有其他字段 , 那么就会报这个错误 ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 2.这是因为高版本mysql添加了一个sql_mode 查看sql_mode select @@sql_mode; mysql> select @@sql_mode; +——————————————————————————————————————————————-+ | @@sql_mode | +——————————————————————————————————————————————-+ | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_pISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +——————————————————————————————————————————————-+ 可以看到有一个ONLY_FULL_GROUP_BY , 这个就是严格控制group by 和select 字段的 , 在不改变sql语句的前提下 , 把这个去掉就可以了 3.我的ubuntu系统下编辑的这个文件 /etc/mysql/conf.d/mysql.cnf , 其他系统找到对应的配置文件就可以了 ,在[mysqld]块下 ,把sql_mode配置上 , 并且去掉ONLY_FULL_GROUP_BY sql_mode=’STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_pISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’ 4.此时就正常了 相关教程:mysql视频教程 以上就是在MySQL 5.7上使用group by语句出现1055错误问题的详细内容,更多请关注php中文网其它相关文章!
mysql数据库事务的隔离级别有4个,而默认的事务处理级别就是’REPEATABLE-READ’,也就是可重复读。下面本篇文章就来带大家了解一下mysql的这4种事务的隔离级别,希望对大家有所帮助。 SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。 mysql的4种事务隔离级别,如下所示: 1、未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据 2、提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读) 3、可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读,但是innoDB解决了幻读 4、串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞 欢迎关注学派吧 推荐云数据库 https://www.sq9.cn
为查询优化你的查询 大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。 这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例: // 查询缓存不开启 $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // 开启查询缓存 $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'"); 上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。 学会使用EXPLAIN 使用EXPLAIN关键字可以让你知道MySQL是如何处理你的SQL语句的。 select id, title, cate from news where cate = 1 发现查询缓慢,然后在cate字段上增加索引,则会加快查询 当只要一行数据时使用LIMIT 1 当你查询表的有些时候只需要一条数据,请使用 limit 1。 正确的使用索引 索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索、拍下、条件,那么,请为其建立索引吧。 不要ORDER BY RAND() 效率很低的一种随机查询。 避免SELECT * 从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。必须应该养成一个需要什么就取什么的好的习惯。 使用 ENUM 而不是 VARCHAR ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。 如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。 使用 NOT NULL 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。 首先,问问你自己“Empty”和“NULL”有多大的区别(如果是INT,那就是0和NULL)?如果你觉得它们之间没有什么区别,那么你就不要使用NULL。(你知道吗?在 Oracle 里,NULL 和 Empty 的字符串是一样的!) 不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。 下面摘自MySQL自己的文档 “NULL columns require additional space in the row to record whether their values are NULL. For MyISAM tables, each NULL column takes one bit extra, rounded...
MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。 MyISAM是MySQL的默认存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。 InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。 核心区别 MyISAM是非事务安全型的,而InnoDB是事务安全型的。 MyISAM锁的粒度是表级,而InnoDB支持行级锁定。 MyISAM支持全文类型索引,而InnoDB不支持全文索引。 MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。 MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。 InnoDB表比MyISAM表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb)。 应用场景 MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。 InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。 Mysql的存储引擎和索引 数据库必须有索引,没有索引则检索过程变成了顺序查找,O(n)的时间复杂度几乎是不能忍受的。我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引,只要将关键字存储到树的节点即可。当数据库一条记录里包含多个字段时,一棵B+树就只能存储主键,如果检索的是非主键字段,则主键索引失去作用,又变成顺序查找了。这时应该在第二个要检索的列上建立第二套索引。 这个索引由独立的B+树来组织。有两种常见的方法可以解决多个B+树访问同一套表数据的问题,一种叫做聚簇索引(clustered index ),一种叫做非聚簇索引(secondary index)。这两个名字虽然都叫做索引,但这并不是一种单独的索引类型,而是一种数据存储方式。对于聚簇索引存储来说,行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键,主键和非主键B+树几乎是两种类型的树。对于非聚簇索引存储来说,主键B+树在叶子节点存储指向真正数据行的指针,而非主键。 InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用"where id = 14"这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。 MyISM使用的是非聚簇索引,非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是独立的,通过辅助键检索无需访问主键的索引树。 为了更形象说明这两种索引的区别,我们假想一个表如下图存储了4行数据。其中Id作为主索引,Name作为辅助索引。图示清晰的显示了聚簇索引和非聚簇索引的差异。 我们重点关注聚簇索引,看上去聚簇索引的效率明显要低于非聚簇索引,因为每次使用辅助索引检索都要经过两次B+树查找,这不是多此一举吗?聚簇索引的优势在哪? 1 由于行数据和叶子节点存储在一起,这样主键和行数据是一起被载入内存的,找到叶子节点就可以立刻将行数据返回了,如果按照主键Id来组织数据,获得数据更快。 2 辅助索引使用主键作为"指针" 而不是使用地址值作为指针的好处是,减少了当出现行移动或者数据页分裂时辅助索引的维护工作,使用主键值当作指针会让辅助索引占用更多的空间,换来的好处是InnoDB在移动行时无须更新辅助索引中的这个"指针"。也就是说行的位置(实现中通过16K的Page来定位,后面会涉及)会随着数据库里数据的修改而发生变化(前面的B+树节点分裂以及Page的分裂),使用聚簇索引就可以保证不管这个主键B+树的节点如何变化,辅助索引树都不受影响。 所以在百万级数据及更大数据情况下,mysql innoDB 的索引表现更加优秀! 以上就是mysql存储引擎:myIsam和innodb的区别的详细内容,更多请关注php中文网其它相关文章!
Apache服务器是一个开源跨平台的web服务器。它具有多种免费且开源的web技术,适应多种操作系统。另外它还具有为软件添加更多功能的模块,使得它成为功能最丰富的HTTP网络服务器 Apache是一种流行的开源,跨平台的Web服务器,同时它也是现有最流行的web服务器,接下来将在文章中为大家详细介绍这一服务器,希望对大家有所帮助。 【推荐课程:数据库教程】 Apache服务器 Apache服务器除了受欢迎程度之外,它还是最古老的web服务器之一,它的第一个版本在1995年发布,与其他web服务器一样,Apache为访问者提供服务网站文件的后台方面。它推广各种免费和开源的高级Web技术。Apache Web服务器提供了全方位的功能,包括CGI,SSL和虚拟域; 它还支持用于扩展的插件模块。尽管Apache最初是为Unix环境设计的,但超过90%的安装都是在Linux上运行的。但是,它也适用于Windows 等其他操作系统。 Apache服务器如何工作 所有的Web服务器的基本任务都是接受来自客户端的请求(例如一个访问者的网络浏览器),然后将请求发送到响应页面(如页面组件,一个访客想看)。 Apache Web服务器具有为其软件添加更多功能的模块,例如MPM(用于处理多处理模式)或 mod_ssl启用SSL v3和TLS支持。以下是Apache中的一些常见功能: IPv6 FTP 带宽限制 WebDAV 负载均衡 URL重写 会话跟踪 基于IP地址的地理位置 为什么使用Apache服务器 Apache最重要的好处是它可以免费用于个人和商业用途,另外它也是一个可靠的软件框架,并且仍然得到积极维护,因此它可以获得频繁的功能升级以及安全补丁和漏洞改进。 虽然Apache是一款免费且更新的产品,但它并不吝啬功能。事实上,它是功能最丰富的HTTP网络服务器之一,这是它如此受欢迎的另一个原因。Apache通过使用模块为软件添加更多的功能,Apache支持: 密码验证和数字证书 可自定义的错误消息 通过虚拟主机功能支持多个网站 代理服务 SSL和TLS GZIP压缩可加快网页速度 总结:以上就是本篇文章的全部内容了,希望对大家有所帮助。 以上就是Apache服务器是什么的详细内容,更多请关注php中文网其它相关文章!
接上一节《百万数据mysql分页问题》,我们加上查询条件: select id from news where cate = 1 order by id desc limit 500000 ,10 查询时间 20 秒 好恐怖的速度!!利用第一节《百万数据mysql数据测试环境介绍》知识进行优化: select * from news where cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10 查询时间 15 秒 优化效果不明显,条件带来的影响还是很大!在这样的情况下无论我们怎么去优化sql语句就无法解决运行效率问题。那么换个思路:建立一个索引表,只记录文章的id、分类信息,我们将文章内容这个大字段分割出去。 表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ] ------------------------------------------------- idint11主键自动增加 cateint11索引 在写入数据时将2张表同步,查询是则可以使用news2 来进行条件查询: select * from news where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) order by id desc limit 0,10 注意条件 id > 后面使用了news2 这张表! 运行时间 1.23秒,我们可以看到运行时间缩减了近20倍!!数据在10万左右是查询时间可以保持在0.5秒左右,是一个逐步接近我们能够容忍的值! 但是1秒对于服务器来说依然是一个不能接受的值!!还有什么可以优化的办法吗??我们尝试了一个伟大的变化: 将 news2 的存储引擎改变为innodb,执行结果是惊人的! select * from news where cate =...
在开发过程中我们经常会使用分页,核心技术是使用limit进行数据的读取。在使用limit进行分页的测试过程中,得到以下数据: select * from news order by id desc limit 0,10 耗时0.003秒 select * from news order by id desc limit 10000,10 耗时0.058秒 select * from news order by id desc limit 100000,10 耗时0.575秒 select * from news order by id desc limit 1000000,10 耗时7.28秒 我们惊讶的发现mysql在数据量大的情况下分页起点越大查询速度越慢,100万条起的查询速度已经需要7秒钟。这是一个我们无法接受的数值! 改进方案 1 select * from news where id > (select id from news order by id desc limit 1000000, 1) order by id desc limit 0,10 查询时间 0.365秒,提升效率是非常明显的!!原理是什么呢??? 我们使用条件对id进行了筛选,在子查询 (select id from news order by id desc limit 1000000, 1) 中我们只查询了id这一个字段比起select * 或 select 多个字段 节省了大量的查询开销! 改进方案2 适合id连续的系统,速度极快! select * from news where id between 1000000 and 1000010 order by id desc 不适合带有条件的、id不连续的查询。速度非常快! 以上就是百万数据下mysql分页问题的详细内容,更多请关注php中文网其它相关文章!
information_schema提供了对数据库元数据、统计信息、以及有关MySQL Server的信息访问(例如:数据库名或表名,字段的数据类型和访问权限等)。information_schema库中保存的信息也可以称为MySQL的数据字典或系统目录。本文主要讲述了information_schema库中包含所有表的字段信息,感兴趣的朋友可以了解一下。 sql注入后可以通过该数据库获取所有表的字段信息 1.COLLATIONS表提供有关每个字符集的排序规则的信息。 COLLATIONS表包含以下列: COLLATION_NAME 排序规则名称。 CHARACTER_SET_NAME 与排序规则关联的字符集的名称。 ID 排序规则ID。 IS_DEFAULT 排序规则是否为其字符集的默认值。 IS_COMPILED 字符集是否已编译到服务器中。 SORTLEN 这与对字符集中表示的字符串进行排序所需的内存量有关。 2.SHOW COLLATION;//也可以查询到排序规则信息 3.COLLATION_CHARACTER_SET_APPLICABILITY 表 COLLATION_NAME 排序规则名称。 CHARACTER_SET_NAME 与排序规则关联的字符集的名称 4.COLUMNS 提供表中字段的信息 TABLE_CATALOG 包含该列的表所属的目录的名称。该值始终为def。 TABLE_SCHEMA 包含字段所在数据库的名称。 TABLE_NAME 包含字段所在表的名称。 COLUMN_NAME 字段的名称。 ORDINAL_POSITION 表中字段的位置。 ORDINAL_POSITION是必要的,因为你可能想说 ORDER BY ORDINAL_POSITION。与SHOW COLUMNS不同,COLUMNS表中的SELECT没有自动排序。show columns的语法是例如:show columns from my_test.user; COLUMN_DEFAULT 字段的默认值。如果字段具有显式缺省值NULL,或者字段定义不包含DEFAULT子句,则此值为NULL。 IS_NULLABLE 字段可为空性。如果NULL值可以存储在列中,则值为YES,否则为NO。 DATA_TYPE 字段数据类型。 DATA_TYPE值只是类型名称,没有其他信息。 COLUMN_TYPE 值包含类型名称以及可能的其他信息,例如精度或长度。 CHARACTER_MAXIMUM_LENGTH 对于字符串列,最大长度(以字符为单位)。 CHARACTER_OCTET_LENGTH 对于字符串列,最大长度(以字节为单位)。 NUMERIC_PRECISION 对于数字字段,数字精度。 NUMERIC_SCALE 对于数字字段,数字刻度。 DATETIME_PRECISION 对于时间字段,小数秒精度。 CHARACTER_SET_NAME 对于字符串字段,字符集名称。 COLLATION_NAME 对于字符串字段,排序规则名称。 COLUMN_TYPE 字段数据类型。 DATA_TYPE 值只是类型名称,没有其他信息。 COLUMN_TYPE 值包含类型名称以及可能的其他信息,例如精度或长度。 COLUMN_KEY 名称是否已建立索引 EXTRA 有关给定字段的任何其他可用信息。 PRIVILEGES 您对该字段的权限。 COLUMN_COMMENT 字段定义中包含的任何注释。 GENERATION_EXPRESSION 对于生成的字段,显示用于计算列值的表达式. 相关教程:mysql视频教程 以上就是【MySQL】information_schema库中包含所有表的字段信息的详细内容,更多请关注php中文网其它相关文章!
在MySQL中,RLIKE运算符用于确定字符串是否匹配正则表达式。它是REGEXP_LIKE()的同义词。 如果字符串与提供的正则表达式匹配,则结果为1,否则为0。 语法是这样的: expr RLIKE pat 其中expr是输入字符串,pat是测试字符串的正则表达式。 例子 下面是一个如何在SELECT语句中使用这个运算符的例子: SELECT 'Tweet' REGEXP '^Tw.*t$'; 结果: +--------------------------+ | 'Tweet' REGEXP '^Tw.*t$' | +--------------------------+ | 1 | +--------------------------+ 在这种情况下,返回值1表示输入字符串与正则表达式匹配。特别是,我们指定输入字符串应以Tw开头并以t结尾(这是因为我们启动了模式^Tw并使用t$结束)。该.部分指定任何字符,并*指定它对任意数量的那个(任何)字符可以为零。因此.*意味着在开始和结束之间不能有字符,一个字符或许多字符。 下面是如果我们去掉*会发生什么: SELECT 'Tweet' REGEXP '^Tw.t$'; 结果: +-------------------------+ | 'Tweet' REGEXP '^Tw.t$' | +-------------------------+ | 0 | +-------------------------+ 返回结果0意味着不匹配。这是因为.只指定任何字符的一个实例。我们的输入字符串包含两个实例 SELECT 'Twet' REGEXP '^Tw.t$' AS 'Twet', 'Twit' REGEXP '^Tw.t$' AS 'Twit', 'Twt' REGEXP '^Tw.t$' AS 'Twt', 'Tw.t' REGEXP '^Tw.t$' AS 'Tw.t'; 结果: +------+------+-----+------+ | Twet | Twit | Twt | Tw.t | +------+------+-----+------+ | 1 | 1 | 0 | 1 | +------+------+-----+------+ 相关推荐:《mysql教程》 以上就是MySQL中RLIKE运算符的使用详解的详细内容,更多请关注php中文网其它相关文章!
本文主要讲述了当mysql禁止外部访问的解决方案,具有一定的收藏价值,有需要的朋友了解一下吧。 1.在端口已经开放的情况下,ubuntu mysql 3306允许远程访问vim /etc/mysql/mysql.conf.d/mysqld.cnf注释#bind-address = 127.0.0.1 2.给用户授权允许远程访问:grant all privileges on *.* to root@"%" identified by "pwd" with grant option;flush privileges; 创建和授权用户某些权限的测试,在mysql数据库的user表里进行的操作 1.mysql创建用户:CREATE USER 'taoshihan'@'localhost' IDENTIFIED BY '';localhost是只是本地%是允许远程CREATE USER 'taoshihan115'@'%' IDENTIFIED BY 'TAOshihan1'; 删除用户:drop user 'taoshihan'@'localhost' 2.授权:GRANT select ON *.* TO 'taoshihan115'@'%';授权指定GRANT all ON *.* TO 'taoshihan115'@'%';授权所有 当mysql重启不了的时候,看看日志目录比如/var/log/mysql 是否存在,属组和属主是否是mysql 如果没有,创建目录,并更改目录的所有者 chown mysql:mysql 想了解更多mysql教程,请关注PHP中文网了解更多mysql教程! 以上就是mysql禁止外部访问解决方案的详细内容,更多请关注php中文网其它相关文章!
今天主要写mysql在centos下 通过命令导出 导入教程分享 服务器:商祺云服务器 – https://www.sq9.cn 开始: 备份: mysqldump -u数据库名 -p"密码" -h localhost 数据名 > /www/wwwroot/ceshi.com/aiqutui.sq(备份路径) 恢复命令: mysql -u数据名 -p"密码" -h localhost 数据名 < /www/wwwroot/ceshi.com/aiqutui.sql(恢复路径) 如何从A服务器搬迁到B服务器呢。那就需要scp命令了 scp file.txt remote_username@10.10.0.2:/remote/directory() 说明:file.txt 是我们要复制的文件名,remote_username 是远程服务器上的用户名,10.10.0.2 是服务器 IP 地址;/remote/directory 是要将文件复制到的目录的路径,如果不指定远程目录,文件将被复制到远程用户主目录 以上就是数据库搬迁导入教程、有运维问题 欢迎加QQ 690624