MySQL常用配置
查看MySQL的参数信息
mysql> show variables;
查看key_buffer_size的使用情况
mysql> show status like 'key_read%';
一、数据库配置文件内容及参数说明
配置文件位置:/database/mysql/my.cnf
[mysqld]
log_bin=/database/mysql/data/mysql3306-bin
binlog-ignore-db=mysql,test
# These are commonly set, remove the # and set as required.
basedir=/database/mysql
datadir=/database/mysql/data
port=3306
server_id=811
socket=/database/mysql/data/mysql3306.sock
lower_case_table_names=1
skip-locking
key_buffer_size=256M
max_allowed_packet=1M
sort_buffer_size=1M
read_buffer_size=1M
read_rnd_buffer_size=4M
myisam_sort_buffer_size=64M
thread_cache_size=8
query_cache_size=16M
thread_concurrency=8
interactive_timeout=8
wait_timeout=8
slow_query_log=on
long_query_time=1
slow-query-log-file=/database/mysql/slow.log
参数说明:
log_bin:二进制文件保存位置(主从数据库中的应用)
binlog-ignore-db:(不包含的数据库)
basedir:MySQL的安装位置
datadir:数据文件的保存位置
port:端口号
server_id:用于标识该语句最初是从哪个server写入的
socket:socket文件的保存位置
lower_case_table_names:创建的表名全部小写
skip-locking:过滤掉锁
key_buffer_size:首先可以根据系统的内存大小设定它,大概的一个参考值:1G以下内存设定128M;2G/256M; 4G/384M;8G/1024M;16G/2048M.这个值可以通过检查状态值Key_read_requests和 Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read% '获得)。注意:该参数值设置的过大反而会是服务器整体效率降低!
max_allowed_packet:允许最大的包主要在phpadmin中导入文件是的应用
sort_buffer_size:查询排序时所能使用的缓冲区大小,该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。所以,对于内存在4GB左右的服务器推荐设置为4-8M
read_buffer_size:读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享!
read_rnd_buffer_size:排序的缓冲区大小
myisam_sort_buffer_size:这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般4G内存给64M即可
thread_cache_size:表示可以重新利用保存在缓存中线程的数,参考如下值:1G —> 8 2G —> 16 3G —> 32 >3G —> 64
query_cache_size:MySQL查询操作缓冲区的大小,通过以下做法调整:SHOW STATUS LIKE ‘Qcache%’; 如果Qcache_lowmem_prunes该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。如果该值非常大,则表明经常出现缓冲不够的情况,需要增加缓存大小;Qcache_free_memory:查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,我们可以根据实际情况做出调整。一般情况下4G内存设置64M足够了。
thread_concurrency:这个值设置为cpu核数的2倍即可
interactive_timeout=8
wait_timeout:表示空闲的连接超时时间,默认是28800s,这个参数是和interactive_timeout一起使用的,也就是说要想让wait_timeout 生效,必须同时设置interactive_timeout,建议他们两个都设置为10
slow_query_log=on:打开慢查询的开关
long_query_time:sql语句的查询时间
slow-query-log-file:慢查询的保存位置
二、MySQL的root密码重置
设置mysql的密码:
# mysqladmin -uroot password 'fanjinbao '
重置密码时要在my.cnf加入:
skip-grant
重启MySQL的服务
# service mysqld restart
然后输入mysql就可以直接登录了
更改root用户的密码
mysql>use mysql;
mysql>update user set password=password('fanjinbao ') where user= 'root ';
查看root用户的状态
mysql> select * from user where user='root'\G;
修改完密码后记得将my.cnf中的skip-grant去掉,并重启MySQL的服务。
三、MySQL允许远程登录
mysql> grant all on *.* to 'root'@'192.168.1.250' identified by 'yourpwis250';
详细说明:all表示所有权限,ip是来源ip,yourpwid250是密码。
mysql的另一种登录方式,可以是用socket文件来登录:
# mysql -uroot -S /tmp/mysql.sock -p密码
四、MySQL的常用操作
mysql> show databases;查看有哪些数据库
mysql> use mysql;切换数据库
mysql> select database();查看在那个数据库下面
mysql> select user();查看登录的用户
mysql> select version();查看数据库版本
mysql> show tables;查看库里有哪些表
mysql> desc pre_ucenter_vars;查看表中有哪些字段
mysql> show create table pre_ucenter_vars\G;查看建表语句
mysql> create table fansik (`id` int(4),`name` char(40)) engine=myisam default charset=gbk;创建fasik表
mysql> insert into fansik values(1,'fansik');插入一行数据
mysql> insert into fansik(id) values(1);插入name为null数据
mysql> update fansik set id=2 where name='fanjinbao';修改数据
mysql> delete from fansik where name='fanjinbao';删除名字为fanjinbao的行
mysql> truncate table discuz.fansik;清空discuz数据库中的fansik表
mysql> drop table discuz.fansik;删除discuz数据库中的fansik表
mysql> drop database discuz;删除discuz数据库
五、数据库的权限授权
mysql> grant all on discuz.* to 'fansik'@'192.168.1.250' identified by 'yourpwis250';授权一个用户可以对discuz数据库有好多好多的权限
mysql> flush privileges;使新增的用户权限生效,刷新权限
mysql> show processlist;查看哪些用户在连接数据库
mysql> show variables;查看变量
不重启数据库的情况下修改数据库的属性,可以只用修改数据库属性值
mysql> show variables like 'max_connections';值是151
mysql> set global max_connections=200;修改为200
这样就可以在不重启数据库的情况下修改属性配置了
mysql> show status;查看状态
mysql> show status like '%running%';使用通配的方式查看状态
mysql> repair table discuz.fansik;修复discuz数据库的fansik表
六、MySQL的备份与恢复
备份discuz数据库
# mysqldump -uroot -pnyzcglyxgs -P3306 discuz > discuz.sql
恢复备份的discuz数据库
# mysqldump -uroot -pnyzcglyxgs -P3306 discuz < discuz.sql
备份一个表
# mysqldump -uroot -pnyzcglyxgs -P3306 discuz fansik > fansik.sql
恢复一个表(恢复表的时候就不用再加表名了)
# mysqldump -uroot -pnyzcglyxgs -P3306 discuz < fansik.sql
如果需要指定字符集需要在备份或恢复的时候添加
--default-character-set=utf-8