数据库优化
4-1 优化表的类型
在mysql中,可以使用函数PROCEDUREANALYSE()对当前应用的表进行分析,
4-2 通过拆分提高表的访问效率
1.分库分表
2.分区
主要目的:
1.减少表的记录数
2.减小对操作系统的负担压力
4-3 使用中间表提高统计查询速度
中间表的产生:
1.view视图
2.重新生成一个新表
mysql服务器优化
5.1 myisam读锁定
1.lock table t1 read
2.开启另一个mysql连接终端,接着去尝试:select * from t1
3.再insert、update和delete t1这张表,你会发现所有的数据都停留在终端上没有真正的去操作
4.读锁定对我们在做备份大量数据时非常有用。
mysqldump -uroot -p123 test >test.sql
5.2 myisam写锁定
1.lock table t1 write
2.打开另一个mysql终端,尝试去select、insert、update和delete这张表t1,你会发现都不能操作,都会停留在终端上,只有等第一个终端操作完毕,第二个终端才能真正执行。
3.可见表的写锁定比读锁定更严格
4.一般情况下我们很少去显示的去对表进行read和write锁定的,myisam会自动进行锁定的
6. 1 四种字符集问题
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
defautl-character-set = utf-8
[mysqsld]
port = 3306
socket = /var/lib/mysql/mysql.sock
character-set-server = utf-8
collation-server = utf8_general_ci
6. 2 binary log 日志问题
1.log-bin=mysql-bin
查看bin-log日志:
mysql>show binary logs;
6. 3 slow log 慢查询日志问题
1.有关慢查询
开户和设置慢查询时间:
vi /etc/my.cnf
log_slow_queries=slow.log
long_query_time=5
慢查询次数:
mysql>show global status like “%quer%”;
6. 4 socket 问题
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
mysql socket无法登陆
1.有时登陆mysql时提示不能用socket登陆,此时可以换成tcp方式去登陆,但是可以测试时可以这样用,但是必须要在PHP去用之前把这个事情解决了。
这样就可以登陆,这样就不用mysql.sock来登陆,而mysql.sock是启动mysqld服务时产生的
6. 5 root 密码丢失
root密码丢失破解
service mysqld stop
mysqld_safe --skip-grant-tables --user=mysql& //跳过授权表mysql.user和mysql.db这些表
mysql -uroot
set password=password("wei"); //用这一条语句结果报错,就是因为加了--skip-grant-tables
mysql>update user set password=password("wei") where user="root" and host="localhost";
mysql>set password for root@localhost=password("wei");
mysql>set password=password("wei"); //和第五步一样,都可能成功修改密码