lunixs 退出mysql_MySQL的基本操作

1、数据库登录

格式:mysql -h主机地址 -u用户名 -p用户密码 -P端口 -D数据库 -e “SQL内容”

[root@wulaoer ~]# mysql -uroot -p

2、修改密码

格式:mysqladmin -u用户名 -p旧密码 password 新密码

[root@wulaoer ~]# mysqladmin -uroot  password '123456'

注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。

例2:再将root的密码改为wulaoer。

spacer.gif

spacer.gif

[root@wulaoer ~]# mysqladmin -uroot  -p'123456' password 'wulaoer'或[root@wulaoer ~]# service mysqld start[root@wulaoer ~]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking 如果是安装版的也可以在安装目录下执行 ./scripts/mysql_install_db --user=mysql[root@wulaoer ~]# mysql -uroot -p #直接进数据库不用密码Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, 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 mysql; #切换到数据库Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> update user set password=PASSWORD("wulaoer")where user="root";#修改数据库的密码Query OK, 3 rows affected (0.01 sec)Rows matched: 3  Changed: 3  Warnings: 0mysql> flush privileges;#更新权限Query OK, 0 rows affected (0.00 sec)mysql> quit #退出Bye[root@wulaoer ~]# service mysqld start正在启动 mysqld:                                          [确定][root@wulaoer ~]# mysql -uroot -pEnter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 6Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, 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.

spacer.gif

3、添加用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

例1、增加一个用户root密码为wullaoer,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:

mysql> grant select,insert,update,deleteon on *.* to root@localhost identified by 'wulaoer';Query OK, 0 rows affected (0.00 sec)或mysql> grant all privileges on *.* to root@localhost identified by 'wulaoer';Query OK, 0 rows affected (0.00 sec)

如果你不想test2有密码,可以再打一个命令将密码消掉。

mysql> grant select,insert,update,delete on *.* to root@localhost identified by ' ';#localhos是本机登录Query OK, 0 rows affected (0.00 sec)

4、创建数据库

格式:create database name; 创建数据库

spacer.gif

spacer.gif

mysql> show databases;#查看数据库+--------------------+| Database           |+--------------------+| information_schema || mysql              || test               || user               |+--------------------+4 rows in set (0.00 sec)mysql> create database wulaoer;#创建数据库Query OK, 1 row affected (0.00 sec)mysql> show databases;#查看数据库+--------------------+| Database           |+--------------------+| information_schema || mysql              || test               || user               || wulaoer            |+--------------------+5 rows in set (0.00 sec)

spacer.gif

格式:use databasename; 选择数据库

mysql> use wulaoer;#切换数据库Database changed

5、备份或恢复数据库

5.1格式:mysqldump -h 主机 -u 用户名 -p 数据库 > 备份地址以及备份名称

[root@wulaoer ~]# mysqldump -uroot -p wulaoer > wulaoer.sqlEnter password: [root@wulaoer ~]# lsanaconda-ks.cfg  install.log  install.log.syslog  wulaoer.sql

5.2还原格式:mysqldump -h 主机 -u 用户名 -p 数据库 < 还原的数据库

这里先把wulaoer这个数据库删除掉

spacer.gif

spacer.gif

mysql> drop database wulaoer;Query OK, 0 rows affected (0.01 sec)mysql> show databases;+--------------------+| Database           |+--------------------+| information_schema || mysql              || test               || user               |+--------------------+4 rows in set (0.00 sec)

spacer.gif

实例:

spacer.gif

spacer.gif

[root@wulaoer ~]# mysqladmin -h localhost -u root -p create wulaoer #新建要还原的数据库名Enter password: [root@wulaoer ~]# mysqldump -uroot -p wulaoer 

spacer.gif

注:如果要还原数据库,数据库中一定要有要还原的数据库的名字,

如果只想卸除建表指令,则可以如下:

[root@wulaoer ~]# mysqladmin -u root -p  databasename > a.sqlEnter password: [root@wulaoer ~]# mysqldump -uroot -p test mytable>./test.txtEnter password:

将备份数据导入到数据:(导回test数据库)

5.3备份数据库wulaoer

[root@wulaoer ~]# mysqldump -uroot -p wulaoer > wulaoer.sql

得到的wulaoer.sql是一个sql脚本,不包括建库的语句,所以你需要手工创建数据库才可以导入恢复数据库wulaoer,需要创建一个空库wulaoer

[root@wulaoer ~]# mysql -uroot -p wulaoer 

如果不希望后来公共创建wulaoer,可以

[root@wulaoer ~]# mysqldump -uroot -p --databases wulaoer > wulaoer.sql[root@wulaoer ~]# mysql -uroot -p > wulaoer.sql

但这样的话系统种就不能存在wulaoer库,且无法导入其他名字的数据库,当然你可以手工修改wulaoer.sql文件

如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下:

[root@wulaoer ~]# mysqladmin -uroot -p databasename > a.sql

那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢?

可将查询存储在一个文件中并告诉mysql从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。例如,如果在文件my_file.sql 中存放有查

5.4完整备份:

给予mysql的完整恢复,因为bin-log记录着所有的事件的操作,当mysql发生灾难错误时,可以通过bin-log做完整恢复,给予 时间点和位置的恢复。例如:每天定义执行一点用mysqldump备份数据库,但是在三点由于数据库出现了故障,数据库无法访问需要恢复,先把数据库恢复 到一点的完整备份,在使用mysqlbinlog恢复从一点到mysqldump备份以来的binlog,这样数据库就能恢复到原来的状态

[root@wulaoer ~]# /usr/local/mysql/bin/mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > fullbackup_sunday_11_PM.sql

5.5增量备份数据库

spacer.gif

spacer.gif

用more查看备份的数据库:[root@wulaoer ~]# more fullbackup_sunday_11_PM.sql -- MySQL dump 10.13  Distrib 5.5.44, for Linux (x86_64)---- Host: localhost    Database: -- -------------------------------------------------------- Server version    5.5.44-cll-lve/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;---- Position to start replication or point-in-time recovery from---- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000006', MASTER_LOG_POS=107;---- Current Database: `mysql`...............................省略部分................................................

spacer.gif

在上面的信息里可以看到备份后所有的更改都保存在mysqld-bin.000006二进制文件中然后在完全备份的每天执行下面的命令做一次增量备份

[root@localhost ~]# mysqladmin -uroot -p  flush-logs

这是需要把二进制文件保存到一个安全的地方,以方便恢复。

5.6恢复备份:

举例说明:

如果设定了每个星期日早上六点完整备份,每隔一个小时进行一次增量备份,在八点的时候数据库崩溃,这是就需要进行恢复数据库了。先进行完整恢复:

mysql -u root -p < fullbackup_sunday_11_PM.sql

在接 七点、八点的增量备份

[root@wulaoer ~]# /var/lib/mysql/mysqld-bin.000006 mysqld-bin.000007 | mysql -uroot -p

恢复完备份之后,就可以找到最新的增量做最新的完整恢复

mysqlbinlog 后加 --database "具体库" 可恢复具体库的增量信息加 --stop-date="2010-12-20 13:15:00" 可恢复到该日志的具体时间点,如果恢复一个时间段可以--start-date="2010-12-20 13:15:00"--stop-date="2016-1-20 13:15:00"

flush privileges;

6、导入.sql文件命令(例如D:/mysql.sql)

mysql>use wulaoer;mysql> source /home/wulaoer.sql;

UPDATE以新的值更新现存表中行的列。SET 子句指出要修改哪个列和他们应该给定的值。WHERE子句如果被给出,指定哪个记录行应该被更新。否则,所有的记录行被更新。如果 ORDER BY 子句被指定,记录行将被以指定的次序更新。如果你指定关键词LOW_PRIORITY,UPDATE 的执行将被延迟,直到没有其它的客户端正在读取表。如果你指定关键词IGNORE,该更新语句将不会异常中止,即使在更新过程中出现重复键错误。导致冲突的记录行将不会被更新。如果在一个表达式中从tbl_name 中访问一个列,UPDATE 使用列的当前值。举例来说,下面的语句设置 age 列值为它的当前值加 1 :

mysql> UPDATE persondata SETage=age+1;

UPDATE赋值是从左到右计算的。举例来说,下列语句将 age 列设置为它的两倍,然后再加 1 :

mysql> UPDATE persondata SETage=age*2, age=age+1;

如果你设置列为其当前的值,MySQL 注意到这点,并不更新它。UPDATE返回实际被改变的记录行数目。在 MySQL 3.22 或更新的版本中,C API 函数 mysql_info()返回被匹配并更新的记录行数目,以及在 UPDATE 期间发生的警告的数目。在 MySQL3.23 中,你可以使用 LIMIT # 来确保只有给定的记录行数目被更改。如果一个 ORDER BY 子句被使用(从 MySQL4.0.0 开始支持),记录行将以指定的次序被更新。这实际上只有连同 LIMIT一起才有用。从 MySQL 4.0.4 开始,你也可以执行一个包含多个表的UPDATE 的操作:

UPDATE items,month SETitems.price=month.priceWHERE items.id=month.id;注意:多表 UPDATE 不可以使用 ORDER BY 或LIMIT。

关键字: mysql

启动:net start mySql;

进入:mysql -u root -p/mysql -hlocalhost -u root -p databaseName;

列出数据库:show databases;

选择数据库:use databaseName;

列出表格:show tables;

显示表格列的属性:show columns fromtableName;

建立数据库:source fileName.txt;

匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;

7、用文本方式将数据装入数据库表中(例如D:/mysql.txt)

spacer.gif

spacer.gif

mysql> LOAD DATA LOCAL INFILE/mysql.txt" INTO TABLE MYTABLE;删除数据库 drop database name 直接删除数据库mysqladmin drop database name 删除数据库前,有提示数据库授权 GRANT ALL PRIVILEGES ON bdc.* TObdc@'%' IDENTIFIEDBY 'bdc123' WITH GRANT OPTION;flush privileges授权访问bdc 的所有表 用户为bdc 任何主机 ,密码为bdc@123创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandbmysql >grant select, insert,update, delete, create,drop on fangchandb.* to custom@it363.com identified by ‘passwd’删除授权: mysql> revoke all privilegeson *.* from root@”%”;mysql> delete from user whereuser=”root” and host=”%”;mysql> flush privileges;显示当前mysql版本和当前日期 selectversion(),current_date;查询时间:select now();查询当前用户:select user();查询数据库版本:select version();查询当前使用的数据库:select database();查询所有数据表 >show tables;查询表的字段信息 >desc 表名称;创建表 create table s_position(id int not null auto_increment,name varchar(20) not nulldefault '经理', #设定默认值description varchar(100),primary key PK_positon (id) #设定主键);create table department(id int not null auto_increment,name varchar(20) not nulldefault '系统部', #设定默认值description varchar(100),primary key PK_department (id) #设定主键);create table depart_pos(department_id int not null,position_id int not null,primary key PK_depart_pos(department_id,position_id) #设定复和主键);create table staffer(id int not null auto_incrementprimary key, #设定主键name varchar(20) not nulldefault '无名氏', #设定默认值department_id int not null,position_id int not null,unique (department_id,position_id)#设定唯一值);修改结构 mysql>#表position增加列testalter tableposition add(test char(10));#表position修改列testalter tableposition modify test char(20) not null;#表position修改列test默认值alter tableposition alter test set default 'system';#表position去掉test默认值alter tableposition alter test drop default;#表position去掉列testalter tableposition drop column test;#表depart_pos删除主键alter tabledepart_pos drop primary key;#表depart_pos增加主键alter tabledepart_pos add primary key PK_depart_pos (department_id,position_id);

spacer.gif

8、操作数据库

spacer.gif

#插入表departmentinsert into department(name,description)values('系统部','系统部');insert into department(name,description)values('公关部','公关部');insert into department(name,description)values('客服部','客服部');insert into department(name,description)values('财务部','财务部');insert into department(name,description)values('测试部','测试部');#插入表s_positioninsert into s_position(name,description)values('总监','总监');insert into s_position(name,description)values('经理','经理');insert into s_position(name,description)values('普通员工','普通员工');#插入表depart_posinsert intodepart_pos(department_id,position_id)select a.id department_id,b.id postion_idfrom department a,s_position b;#插入表stafferinsert intostaffer(name,department_id,position_id) values('陈达治',1,1);insert into staffer(name,department_id,position_id)values('李文宾',1,2);insert intostaffer(name,department_id,position_id) values('马佳',1,3);insert intostaffer(name,department_id,position_id) values('亢志强',5,1);insert intostaffer(name,department_id,position_id) values('杨玉茹',4,1);

spacer.gif

9、查询及删除操作

spacer.gif

#显示系统部的人员和职位selecta.name,b.name department_name,c.name position_namefrom staffera,department b,s_position cwherea.department_id=b.id and a.position_id=c.id and b.name='系统部';#显示系统部的人数select count(*)from staffer a,department bwherea.department_id=b.id and b.name='系统部'#显示各部门的人数select count(*)cou,b.name from staffer a,department bwherea.department_id=b.idgroup by b.name;#删除客服部delete fromdepartment where name='客服部';#将财务部修改为财务一部updatedepartment set name='财务一部' wherename='财务部';

spacer.gif

10、清空表

mysql>delete from MYTABLE;

11、删除表:

mysql>drop TABLE MYTABLE;

12、添加表字段:

spacer.gif

alter tabletable1 add transactor varchar(10) not Null;alter tabletable1 add id int unsigned not Null auto_increment primary key修改某个表的字段类型及指定为空或非空 >alter table 表名称 change 字段名称 字段名称 字段类型 [是否允许非空];>alter table 表名称 modify 字段名称 字段类型 [是否允许非空];>alter table 表名称 modify 字段名称 字段类型 [是否允许非空];如果要删除某一字段,可用命令: ALTER TABLEmytable DROP 字段名;

spacer.gif

13、添加唯一键:

ALTER TABLE`test2` ADD UNIQUE ( `userid`)

14、修改主键:

ALTER TABLE`test2` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `id` )alter tableversion_template drop primary key ,add primary key version,role,type);

15、增加索引

ALTER TABLE`test2` ADD INDEX ( `id` )alter tabletable1 add index ind_id (id);create indexind_id on table1 (id);create uniqueindex ind_id on table1 (id);//建立唯一性索引

16、删除索引:

drop indexidx_id on table1;alter tabletable1 drop index ind_id;

17、重命名表:

alter table t1 rename t2;

18、增加一个字段:

alter tabletabelName add column fieldName dateType;

19、增加多个字段

alter tabletabelName add column fieldName1 dateType,add columns fieldName2 dateType;

多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;

增加一个管理员帐户:grant all on *.* to user@localhost identified by"password";

每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;

20、创建临时表:

create temporarytable zengchao(name varchar(10));

21、创建表是先判断表是否存在

create table ifnot exists students(……);

22、从已经有的表中复制表的结构

create tabletable2 select * from table1 where 1<>1;

23、 赋值表

create tabletable2 select * from table1;

24、对表重新命名

alter table table1 rename astable2;

25、修改列的类型

alter table table1 modify id intunsigned;//修改列id的类型为int unsignedalter table table1 change id sidint unsigned;//修改列id的名字为sid,而且把属性修改为int unsigned

26、联合字符或者多个列(将列id与":"和列name和"="连接)

select concat(id,':',name,'=')from students;

27、limit(选出10到20条)

select * from students order byid limit 9,10;

28、MySQL会使用索引的操作符号

=,>,=,between,in,不带%或者_开头的like

29、存储过程

1)查看存储过程

select name from mysql.proc where db=’数据库名’;

select routine_name frominformation_schema.routines where routine_schema='数据库名';

show procedure status where db='数据库名';

30、MySQL存储过程的修改

ALTER PROCEDURE

更改用CREATEPROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。

31、MySQL存储过程的删除

删除一个存储过程比较简单,和删除表一样:

DROP PROCEDURE

从MySQL的表格中删除一个或多个存储过程。

32、存储过程基本函数

(1).字符串类

spacer.gif

CHARSET(str) //返回字串字符集CONCAT (string2 [,... ]) //连接字串INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0LCASE (string2 ) //转换成小写LEFT (string2 ,length ) //从string2中的左边起取length个字符LENGTH (string ) //string长度LOAD_FILE (file_name ) //从文件读取内容LOCATE (substring , string[,start_position ] ) 同INSTR,但可指定开始位置LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为lengthLTRIM (string2 ) //去除前端空格REPEAT (string2 ,count ) //重复count次REPLACE (str ,search_str ,replace_str) //在str中用replace_str替换search_strRPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为lengthRTRIM (string2 ) //去除后端空格STRCMP (string1 ,string2 ) //逐字符比较两字串大小,SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,

spacer.gif

注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1

spacer.gif

mysql> select substring('abcd',0,2); +-----------------------+  | substring('abcd',0,2) | +-----------------------+  |                       | +-----------------------+  1 row in set (0.00 sec)  mysql> select substring('abcd',1,2); +-----------------------+  | substring('abcd',1,2) | +-----------------------+  |     ab                | +-----------------------+  1 row in set (0.02 sec) TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符UCASE (string2 ) //转换成大写RIGHT(string2,length) //取string2最后length个字符SPACE(count) //生成count个空格

spacer.gif

(2).数学类

spacer.gif

ABS (number2 ) //绝对值BIN (decimal_number ) //十进制转二进制CEILING (number2 ) //向上取整CONV(number2,from_base,to_base) //进制转换FLOOR (number2 ) //向下取整FORMAT (number,decimal_places ) //保留小数位数HEX (DecimalNumber ) //转十六进制

spacer.gif

注:HEX()中可传入字符串,则返回其ASC-11码,如HEX('DEF')返回4142143

也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19

LEAST (number , number2 [,..]) //求最小值MOD (numerator ,denominator ) //求余POWER (number ,power ) //求指数RAND([seed]) //随机数ROUND (number [,decimals ]) //四舍五入,decimals为小数位数]

注:返回类型并非均为整数,如:

(1)默认变为×××值

spacer.gif

mysql> select round(1.23); +-------------+  | round(1.23) |  +-------------+  |           1 | +-------------+  1 row in set (0.00 sec)  mysql> select round(1.56); +-------------+  | round(1.56) |  +-------------+  |           2 | +-------------+  1 row in set (0.00 sec)

spacer.gif

(2)可以设定小数位数,返回浮点型数据

spacer.gif

mysql> select round(1.567,2);  +----------------+  | round(1.567,2) |  +----------------+  |           1.57 | +----------------+  1 row in set (0.00 sec) SIGN (number2 ) //

spacer.gif

(3).日期时间类

spacer.gif

ADDTIME (date2 ,time_interval )//将time_interval加到date2CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区CURRENT_DATE ( ) //当前日期CURRENT_TIME ( ) //当前时间CURRENT_TIMESTAMP ( ) //当前时间戳DATE (datetime ) //返回datetime的日期部分DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetimeDATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间DATEDIFF (date1 ,date2 ) //两个日期差DAY (date ) //返回日期的天DAYNAME (date ) //英文星期DAYOFWEEK (date ) //星期(1-7) ,1为星期天DAYOFYEAR (date ) //一年中的第几天EXTRACT (interval_name FROM date ) //从date中提取日期的指定部分MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串MAKETIME (hour ,minute ,second ) //生成时间串MONTHNAME (date ) //英文月份名NOW ( ) //当前时间SEC_TO_TIME (seconds ) //秒数转成时间STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示TIMEDIFF (datetime1 ,datetime2 ) //两个时间差TIME_TO_SEC (time ) //时间转秒数]WEEK (date_time [,start_of_week ]) //第几周YEAR (datetime ) //年份DAYOFMONTH(datetime) //月的第几天HOUR(datetime) //小时LAST_DAY(date) //date的月的最后日期MICROSECOND(datetime) //微秒MONTH(datetime) //月MINUTE(datetime) //分返回符号,正负或0SQRT(number2) //开平方

spacer.gif

33、使用索引的缺点

1)  增删改数据的速度;

2)占用磁盘空间;

3)增加查询优化器的负担;

当查询优化器生成执行计划时,会考虑索引,太多的索引会给查询优化器增加

34、分析索引效率

方法:在一般的SQL语句前加上explain;

分析结果的含义:

1)table:表名;

2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;

3)possible_keys:查询可以利用的索引名;

4)key:实际使用的索引;

5)key_len:索引中被使用部分的长度(字节);

6)ref:显示列名字或者"const"(不明白什么意思);

7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;

8)extra:MySQL的建议;

35、使用较短的定长列

1)尽可能使用较短的数据类型;

2)尽可能使用定长数据类型;

a)用char代替varchar,固定长度的数据处理比变长的快些;

b)对于频繁修改的表,磁盘容易形成碎片,从而影响数据库的整体性能;

c)万一出现数据表崩溃,使用固定长度数据行的表更容易重新构造。使用固定长度的数据行,每个记录的开始位置都是固定记录长度的倍数,可以很容易被检测到,但是使用可变长度的数据行就不一定了;

d)对于MyISAM类型的数据表,虽然转换成固定长度的数据列可以提高性能,但是占据的空间也大;

36、使用not null和enum

尽量将列定义为notnull,这样可使数据的出来更快,所需的空间更少,而且在查询时,MySQL不需要检查是否存在特例,即null值,从而优化查询;

如果一列只含有有限数目的特定值,如性别,是否有效或者入学年份等,在这种情况下应该考虑将其转换为enum列的值,MySQL处理的更快,因为所有的enum值在系统内都是以标识数值来表示的;

37、使用optimize table

对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块, 降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据 表;

38、使用procedure analyse()

可以使用procedure analyse()显示最佳类型的建议,使用很简单,在select语句后面加上procedureanalyse()就可以了;例如:

select * from students procedureanalyse();select * from students procedureanalyse(16,256);

第二条语句要求procedure analyse()不要建议含有多于16个值,或者含有多于256字节的enum类型,如果没有限制,输出可能会很长;

39、使用查询缓存

1)查询缓存的工作方式:

第一次执行某条select语句时,服务器记住该查询的文本内容和查询结果,存储在缓存中,下次碰到这个语句时,直接从缓存中返回结果;当更新数据表后,该数据表的任何缓存查询都变成无效的,并且会被丢弃。

2)配置缓存参数:

变量:query_cache_type,查询缓存的操作模式。有3中模 式,0:不缓存;1:缓存查询,除非与 select sql_no_cache开头;2:根据需要只缓存那些以select sql_cache开头的查询; query_cache_size:设置查询缓存的最大结果集的大小,比这个值大的不会被缓存。

40、调整硬件

1)在机器上装更多的内存;

2)增加更快的硬盘以减少I/O等待时间;

寻道时间是决定性能的主要因素,逐字地移动磁头是最慢的,一旦磁头定位,从磁道读则很快;

3)在不同的物理硬盘设备上重新分配磁盘活动;

如果可能,应将最繁忙的数据库存放在不同的物理设备上,这跟使用同一物理设备的不同分区是不同的,因为它们将争用相同的物理资源(磁头)。

41、MySQL版本查看:

[root@wulaoer ~]# mysql -Vmysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1

或者

spacer.gif

spacer.gif

[root@wulaoer ~]# mysql -uroot -pEnter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 38Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, 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> status;--------------mysql  Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1Connection id:        38Current database:    Current user:        root@localhostSSL:            Not in useCurrent pager:        stdoutUsing outfile:        ''Using delimiter:    ;Server version:        5.1.73 Source distributionProtocol version:    10Connection:        Localhost via UNIX socketServer characterset:    latin1Db     characterset:    latin1Client characterset:    latin1Conn.  characterset:    latin1UNIX socket:        /var/lib/mysql/mysql.sockUptime:            2 hours 12 min 50 secThreads: 1  Questions: 186  Slow queries: 0  Opens: 28  Flush tables: 1  Open tables: 23  Queries per second avg: 0.23--------------mysql> select version();+-----------+| version() |+-----------+| 5.1.73    |+-----------+1 row in set (0.00 sec)mysql> select @@version;+-----------+| @@version |+-----------+| 5.1.73    |+-----------+1 row in set (0.00 sec)

spacer.gif

42、二进制日志查看

spacer.gif

mysql> show variables like 'log_bin';+---------------+-------+| Variable_name | Value |+---------------+-------+| log_bin       | OFF   |+---------------+-------+1 row in set (0.00 sec)

spacer.gif

开 启二进制日志,在windows里my.ini或者linux里my.cnf里,在[mysqld]下加上log-bin=日志名,注{等号后面可以定义 二进制日志文件名和位置}。如果只对某个库进行日志文件记录,那么再添加binlog-do-db=test,这样就只记录test数据库的日志,而放弃 其他的,而binlog-ignore-db=sales 除sales库不记录,其他都记录。配置文件设置好需要重启一下mysql

spacer.gif

mysql> show master status;+------------+----------+--------------+------------------+| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------+----------+--------------+------------------+| log.000001 |      106 |              |                  |+------------+----------+--------------+------------------+1 row in set (0.00 sec)

spacer.gif

43、mysql日志管理

设置my.cnf中的参数[mysqld]下的expire_logs_day = 天数  。此参数是设置日志的过期天数,过期的日志将会被自动删除,

如果日志长度超过了max_binlog_size = (大小可以带单位,默认k)的上限(默认是1G)也会创建一个新的日志文件

①show variables like 'log_%';查看所有的log命令②show variables like 'log_bin';查看具体的log命令

删除日志:

mysql> purge master logs to 'mysql-bin.000009' ;Query OK, 0 rows affected (0.01 sec)mysql> purge master logs before '2015-0-22 00:00:00′;Query OK, 0 rows affected (0.05 sec) RESET MASTER

#删除之前所有的mysqld-bin,并重新生成新的mysqld-bin后缀从000001开始。注:如果您有一个活性的从属服务器,该服 务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读 取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。

44、远程使用客户端连接数据库

(1)删除连接的空账户

mysql> delete from mysql.user where user='';Query OK, 2 rows affected (0.00 sec)

(2)建立客户端连接:

先在防火墙加如一条,防火墙允许3306端口通过,添加后重启防火墙。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

(3)先看以下mysql的配置文件my.cnf或者my.conf,里面([mysqld])有没有bind_address=127.0.0.1,如果有就注释掉,没有的话就不用操作了,

(4)添加允许连接的IP和帐号密码.

mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";

更多可以参考3、添加用户,这里的用户和密码是客户端连接的用户和密码。

(5)查看连接的客户端

spacer.gif

mysql> use mysql;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select user,host from user;+------+--------------+| user | host         |+------+--------------+| root | 127.0.0.1    || root | 192.168.1.36 || root | localhost    || root | wulaoer      |+------+--------------+4 rows in set (0.00 sec)

spacer.gif

(6)删除连接的客户端

关闭远程访问:

mysql> use mysql;mysql> update user set host = "localhost" where user = "root" and host= "%";

(7)删除连接的IP:

spacer.gif

mysql> select user,host from user;+------+--------------+| user | host         |+------+--------------+| root | 127.0.0.1    || root | 192.168.1.36 || root | localhost    || root | wulaoer      |+------+--------------+4 rows in set (0.00 sec)mysql> DELETE FROM user WHERE  Host="localhost";Query OK, 1 row affected (0.00 sec)mysql> select user,host from user;+------+--------------+| user | host         |+------+--------------+| root | 127.0.0.1    || root | 192.168.1.36 || root | wulaoer      |+------+--------------+3 rows in set (0.00 sec)

spacer.gif

45、查看连接MYSQL数据库的IP信息

我们通常情况下要统计数据库的连接数指的是统计总数,没有细分到每个IP上。现在要监控每个IP的连接数,实现方式如下:

方法一:1selectSUBSTRING_INDEX(host,':',1)asip , count(*)frominformation_schema.processlistgroupbyip;

方法二:1mysql -u root -h127.0.0.1 -e"show processlist\G;"| egrep"Host\:"| awk -F:'{ print $2 }'| sort | uniq -c

方法三:1mysql -u root -h127.0.0.1 --skip-column-names -e"show processlist;"|awk'{print $3}'|awk -F":"'{print $1}'|sort|uniq –c

以上就是三种监控IP连接数的实现方式,希望对大家的学习有所帮助。

参考网址http://blog.csdn.net/lxh090821/article/details/9410943

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交际中你所不知道的说话的12个技巧!

1.“有一说一”和“自以为是”不同&#xff0c;别把粗鲁当成真性情与 他人相处&#xff0c;要遵循一个基本原则&#xff1a;己所不欲&#xff0c;勿施于人。你可以真挚地描述自己的感受&#xff0c;前提是不要带有攻击性&#xff0c;至于对他人做出评价和判断&#xff0c;则需要…

宽客的人amp;amp;事件映射

看完《宽客》这本书&#xff0c;叙事介绍20世纪华尔街对冲基金、股票、投资者依赖股市从直觉交易数学家的早期演化、物理学家用数学模型开发过程中的交易&#xff0c;这些进入金融数学家、物理学家依靠大数据分析、稍纵即逝的交易机会来买入卖出&#xff1b;同一时候找出交易模…

社交中的黄金法则,你要细细体会品味

1&#xff0c;不要急着用你的嘴&#xff0c;来为你的眼睛辩护什么。因为天知道你的嘴说出什么来。2&#xff0c;假如有人朝你扔石头&#xff0c;就收起来。因为那会是你日后建高楼的基石。3&#xff0c;能忍则忍&#xff0c;忍不了就改变&#xff0c;改变不了就认了哇。4&#…

这些略带幽默句子,笑的同时多感悟一下吧(收好)

1、穷&#xff0c;并不可怕&#xff0c;我怕穷着穷着就习惯了。2、世界上唯一不用努力&#xff0c;就能得到的只有年龄。3、我是你转身就忘的路人甲&#xff0c;凭什么陪你蹉跎年华到天涯&#xff1f;4、世界上最快乐的事情就是吃&#xff0c;第二快乐的是待会再吃。5、琴棋书画…

java 异常机制_深入理解Java异常处理机制

一、引子try…catch…finally恐怕是大家再熟悉不过的语句了&#xff0c;而且感觉用起来也是很简单&#xff0c;逻辑上似乎也是很容易理解。不过&#xff0c;我亲自体验的“教训”告诉我&#xff0c;这个东西可不是想象中的那么简单、听话。不信&#xff1f;那你看看下面的代码&…

做人:失信是最大的破产!

一个人最大的破产是信用的破产&#xff01;哪怕你一无所有&#xff0c;但只要信用还在&#xff0c;就还有翻身的本金。保护好信用&#xff0c;珍惜别人给你的每一次信任&#xff01;因为有时候我们只有一次机会&#xff01;朋友有时候就像钞票&#xff0c;有真也有假。我们需要…

【干货】微信公众号运营必备工具(完整版)

做微信公众号运营最基本的要素有两点&#xff1a;一是内容要强大&#xff08;内&#xff09;&#xff0c;二是排版要美观&#xff08;外&#xff09;。做好前者&#xff0c;你需要有充足的知识储备以及精彩独到的文笔作为支撑&#xff0c;而做好后者则相对简单许多&#xff0c;…

成功,要“借力”,不要“尽力”(深刻!)

01每个人都喜欢成功&#xff0c;却又时常感觉自己力不从心一个小男孩在院子里搬一块石头&#xff0c;父亲在旁边鼓励&#xff1a;“孩子&#xff0c;只要你全力以赴&#xff0c;一定搬得起来&#xff01;”但是石头太重&#xff0c;最终孩子也没能搬起来。他告诉父亲&#xff1…

从0开始学Java——JSPServlet——HttpServletRequest相关的几个路径信息

在HttpServletRequest中有几个获取路径的接口&#xff1a;getRequestURI/getContextPath/getServletPath/getPathInfo 这些接口互相之间有什么区别&#xff0c;通过下面这段代码就可以分辨清楚了&#xff1a; 1 WebServlet("/hello.view")2 public class FirstServle…

C#编译和运行过程图例

一张图&#xff0c;描述C#编译和运行过程&#xff0c;比较容易记忆理解

C#中的堆和栈理解

引言&#xff1a;程序运行时&#xff0c;它的数据必须存在内存中&#xff0c;一个数据需要多大内存、存储在什么地方以及如何存储都依赖于该数据的数据类型。1、什么是栈栈是一个内存数组&#xff0c;是一个LIFO&#xff08;Last-In-First-Out 后进先出&#xff09;的数据结构。…

C# 基础:Sealed、new、virtual、abstract、override的理解

目录 1、sealed 2、new 3、virtual 4、abstract 5、override 1、sealed 密封类不能被继承&#xff0c;密封方法可以重写基类中的方法&#xff0c;但其本身不能在任何派生类&#xff08;子类&#xff09;中 进一步重写。当应用于属性或者方法时&#xff0c;sealed 修饰符必须始终…

U3D 脚本添加和获得对象

有时候&#xff0c;一开始可能没有对象&#xff0c;而是由于某种触发&#xff0c;产生的一个对象&#xff0c;这里讲解下&#xff0c;如何通过脚本来创建一个对象&#xff1a; 这是通过脚本创建一个立方体&#xff1a; using UnityEngine; using System.Collections;public cla…

50条超精辟的经典语录:哗众,可以取宠,也可以失宠!

在人生道路上给自己定位很重要&#xff0c;不要苛求自己达到不可能达到的高度。我们能把每一件平凡的事做好就是不平凡&#xff0c;把每一件简单的事做成功就是不简单。1.我们只有一个地球&#xff0c;所以你要爱护地球&#xff1b;地球上只有一个我&#xff0c;所以你也要爱护…

IP、TCP和DNS与HTTP的密切关系

看了上一篇博文的发表时间&#xff0c;是7月22日&#xff0c;现在是10月22日&#xff0c;已经有三个月没写博客了。这三个月里各种忙各种瞎折腾&#xff0c;发生了很多事情&#xff0c;也思考了很多问题。现在这段时间开始闲下来了&#xff0c;同时该思考的事情也思考清楚了&am…

【原创】关于ASP.NET WebForm与ASP.NET MVC的比较

WebForm的理解1、 WebForm概念ASP.NETWebform提供了一个类似于Winform的事件响应GUI模型&#xff08;event-drivenGUI&#xff09;&#xff0c;隐藏了HTTP、HTML、JavaScript等细节&#xff0c;将用户界面构建成一个服务器端的树结构控件&#xff08;Control&#xff09;&#…

Asp.Net页面传值的方法简单总结【原创】

1、QueryString当页面上form按照get的方式向页面发送请求数据的时候&#xff0c;web server会将请求数据放入一个QEURY_STRING的环境变量中&#xff0c;然后通过QeueryString方法从这个变量中获取相应的参数。例如&#xff1a;发送参数页面Test1.aspx 按钮单击代码&#xff1a;…

mysql 多字节编码漏洞_phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)

漏洞详情范围 phpMyAdmin 4.8.0和4.8.1原理 首先在index.php 50-63行代码$target_blacklist array (import.php, export.php);// If we have a valid target, lets load that script insteadif (! empty($_REQUEST[target])&& is_string($_REQUEST[target])&&…

25句张小娴经典爱情语录,句句穿心!

1、女人在床上流的眼泪&#xff0c;比在任何一个地方多。男人在床上说的谎话&#xff0c;也比在任何一个地方多。2、承诺本来就是男人与女人的一场角力&#xff0c;有时皆大欢喜&#xff0c;大部份的情况却两败俱伤。3、爱情正是一个将一对陌生人变成情侣&#xff0c;又将一对情…

【原创】Ajax的用法总结

一、什么是AjaxAjax英文全称为“ Asynchr JavsScript and XML”&#xff08;异步的JavaScript和XML&#xff09;&#xff0c;是一种创建交互式网页的开发技术。二、Ajax技术的核心Ajax是一系列相关技术的融合&#xff0c;其核心包括XMLHttpRequest、JavsScript和DOM技术&#x…