MySQL部署文档:
Mysql数据库使用
1.
./configure--prefix=/web/mysql
--without-debug
--with-extra-charsets=gb2312
--with-charsets=默认中文字符支持
--enable-assembler
--without-isam
--without-innodb
--with-pthread
--enable-thread-safe-client
--with-client-ldflags=-all-static
--with-mysqld-ldflags=-all-static
--with-tcp-port=3306
--with-mysqld-user=work
--with-unix-socket-path将MYSQL_UNIX_PORT环境变量设置为Unix套接字文件的路径
2.
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking
#
skip-name-resolve
禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求!
back_log = 384
指定MySQL可能的连接数量。当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。
back_log参数的值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。
试图设定back_log高于你的操作系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。
key_buffer_size =
# key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。
对于内存在4GB左右的服务器该参数可设置为256M或384M。
注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet =
thread_stack = 256K
table_cache = 128K
sort_buffer_size =
查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6
read_buffer_size =
读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!
join_buffer_size =
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!
myisam_sort_buffer_size =
table_cache = 512
thread_cache_size = 64
query_cache_size =
指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:
代码:
# > SHOW VARIABLES LIKE'%query_cache%';
# > SHOW STATUS LIKE'Qcache%';
如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;
如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲;Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
tmp_table_size =
max_connections = 768
指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提
max_connect_errors = 10000000
wait_timeout = 10
指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。
thread_concurrency = 8
该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4 × 2
skip-networking
开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!
3.
解压phpMyAdmin-*.*.*.tar.gz到apache/htdocs中
修改其下的config.inc.php文件中如下内容
$cfgServers[1]['host']
$cfgServers[1]['user']
$cfgServers[1]['password']
$cfgServers[1]['only_db']
4.
InnoDB和MyISAM是在使用MySQL最常用的两个表类型,各有优缺点,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。
MyIASM是IASM表的新版本,有如下扩展:
二进制层次的可移植性。
NULL列索引。
对变长行比ISAM表有更少的碎片。
支持大文件。
更好的索引压缩。
更好的键吗统计分布。
更好和更快的auto_increment处理。
以下是一些细节和具体实现的差别:
1.InnoDB不支持FULLTEXT类型的索引。
2.InnoDB
3.对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引。
4.DELETE FROMtable时,InnoDB不会重新建立表,而是一行一行的删除。
5.LOAD TABLE FROMMASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。
另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table setnum=1 where name like
任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优势。
5.
使用mysqlbinlog命令查看binlog日志内容,binlog日志为二进制文件,运行过程中会产生
6.
普通索引:没有唯一性的限制
唯一性索引:索引列必须唯一
主健:主键是一种唯一性索引,但它必须指定为“PRIMARYKEY”。每个表只能有一个主键
全文索引:全文索引可以在VARCHAR或者TEXT类型的列上创建
索引的建立是需要磁盘空间的,并且当数据增加、更改、删除时,索引有可能会重建,这样会大幅度会降低数据维护效率
7.
BACK TABLEtbl_name TO '/tmp/db_name/';
RESTORE TABLE FROM'/tmp/db_name/';
不推荐使用,不拷贝索引文件,恢复慢
SELECT INTOOUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
LOAD DATA INFILE'/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
恢复前确认表已经存在
Binlog恢复:./mysqlbinlog /tmp/binlog.000001 | mysql -uroot -pdb_name
Mysqldump常用方式
--compatible=name
--complete-insert,-c
--default-character-set=charset
--disable-keys
--extended-insert= true|false
--hex-blob
--lock-all-tables,-x
--lock-tables
--no-create-info,-t
--no-data,-d
--opt
--quick,-q
--routines,-R
--single-transaction
--triggers
./mysqldump -uroot--opt –database db_name > db_name.sql
./mysql –uroot –pdb_name < db_name.sql
mysqlhotcopy它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy
8.
1005:创建表失败
1006:创建数据库失败
1007:数据库已存在,创建数据库失败
1008:数据库不存在,删除数据库失败
1009:不能删除数据库文件导致删除数据库失败
1010:不能删除数据目录导致删除数据库失败
1011:删除数据库文件失败
1012:不能读取系统表中的记录
1020:记录已被其他用户修改
1021:硬盘剩余空间不足,请加大硬盘可用空间
1022:关键字重复,更改记录失败
1023:关闭时发生错误
1024:读文件错误
1025:更改名字时发生错误
1026:写文件错误
1032:记录不存在
1036:数据表是只读的,不能对它进行修改
1037:系统内存不足,请重启数据库或重启服务器
1038:用于排序的内存不足,请增大排序缓冲区
1040:已到达数据库的最大连接数,请加大数据库可用连接数
1041:系统内存不足
1042:无效的主机名
1043:无效连接
1044:当前用户没有访问数据库的权限
1045:不能连接数据库,用户名或密码错误
1048:字段不能为空
1049:数据库不存在
1050:数据表已存在
1051:数据表不存在
1054:字段不存在
1065:无效的SQL语句,SQL语句为空
1081:不能建立Socket连接
1114:数据表已满,不能容纳任何记录
1116:打开的数据表太多
1129:数据库出现异常,请重启数据库
1130:连接数据库失败,没有连接数据库的权限
1133:数据库用户不存在
1141:当前用户无权访问数据库
1142:当前用户无权访问数据表
1143:当前用户无权访问数据表中的字段
1146:数据表不存在
1147:未定义用户对数据表的访问权限
1149:SQL语句语法错误
1158:网络错误,出现读错误,请检查网络连接状况
1159:网络错误,读超时,请检查网络连接状况
1160:网络错误,出现写错误,请检查网络连接状况
1161:网络错误,写超时,请检查网络连接状况
1062:字段值重复,入库失败
1169:字段值重复,更新记录失败
1177:打开数据表失败
1180:提交事务失败
1181:回滚事务失败
1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库
1205:加锁超时
1211:当前用户没有创建用户的权限
1216:外键约束检查失败,更新子表记录失败
1217:外键约束检查失败,删除或修改主表记录失败
1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器
1227:权限不足,您无权进行此操作
1235:MySQL版本过低,不具有本功能
9.
mysqld -----开启日志支持
--log
--log-update
--log-long-formart
●mysql
grant all on database.* to user identified by"password"
revoke all on database fromuser
mysql -uroot -p --one-database databasename <file.sql
●mysqladmin
mysqladmin flush-logs
●mysqldump
--add-drop-table
--quick
--opt
●myisamchk
检查表选项
--extend-check
--medium-check
修复表选项
--recover
--safe-recover
修饰修复表项
--force
--quick
培训作业:
1.
2.
3.
4.
5.