每日小技巧1

1、redis配置文件详解

[root@redis ~]# vim /etc/redis.conf
15 ################################## INCLUDES ###################################
30 # include /path/to/local.conf #包含子配置文件
33 ################################ GENERAL #####################################
37 daemonize yes #是否运行为守护进程
41 pidfile ar/run/redis.pid #pid文件位置
45 port 6379 #监听端口
54 tcp-backlog 511 #本地接收缓冲满了,缓存在tcp队列
65 bind 127.0.0.1 #指明监听的地址
71 # unixsocket /tmp/redis.sock #sock文件位置
72 # unixsocketperm 700 #sock文件权限
75 timeout 0 #客户端超时,0表示不超时
99 loglevel notice #指定日志级别,推荐级别大些
104 logfile ar/log/redis/redis.log #指定日志文件位置
114 # syslog-facility local0 #如果使用syslog接受日志,这里设置syslog设备
119 databases 16 #指定数据库数量
121 ################################ 快照 ################################
141 # save "" #关闭save操作
143 save 900 1 #900秒内,一个键发生变化做一次sava
144 save 300 10 #300秒内,十个键发生变化做一次sava
145 save 60 10000 #60秒内,一万个键发生变化做一次sava
160 stop-writes-on-bgsave-error yes #在进行快照备份时,一旦检测到快照发生错误,是否停止
166 rdbcompression yes #是否对文件进行压缩
175 rdbchecksum yes #是否对rdb的镜像文件做校验码检测
178 dbfilename dump.rdb #指明db文件名
188 dir arb/redis/ #指明db文件目录
190 ################################# 复制 #################################
206 # slaveof <masterip> <masterport> #指定redis主节点的ip地址和端口
213 # masterauth <master-password> #指定redis主节点密码(如果没有则不指定)
226 slave-serve-stale-data yes #当slave丢失master或者同步正在进行时,如果发生对slave的服务请求:设置为yes则slave正常提供服务,设置为no,则salve返回client错误
242 slave-read-only yes #设置从库只读
291 # repl-ping-slave-period 10 #slave发送pings到master的间隔时间
303 # repl-timeout 60 #IO超时时间
331 # repl-backlog-size 1mb #同步的backlog(主库连接从库的队列)大小
340 # repl-backlog-ttl 3600 #backlog生存时间
355 slave-priority 100 #slave优先级
371 # min-slaves-to-write 3 #设置slave小于几个master停止写入操作
372 # min-slaves-max-lag 10 #设置slave落后master指定秒,master停止写入操作
379 ################################## 安全 ###################################
392 # requirepass foobared #设置redis连接密码
403 # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #重命名CONFIG命令
408 # rename-command CONFIG "" #

2

#(1)内存利用方面:
innodb_buffer_pool_size
##这个是Innodb最重要的参数,和MyISAM的key_buffer_size有相似之处,但也是有差别的。这个参数主要缓存innodb表的索引,数据,插入数据时的缓冲。
##该参数分配内存的原则:
##这个参数默认分配只有8M,可以说是非常小的一个值。
##如果是一个专用DB服务器,那么他可以占到内存的70%-80%。
##这个参数不能动态更改,所以分配需多考虑。分配过大,会使Swap占用过多,致使Mysql的查询特慢。
##如果你的数据比较小,那么可分配是你的数据大小+10%左右做为这个参数的值。
##例如:数据大小为50M,那么给这个值分配innodb_buffer_pool_size=64M
##设置方法,在my.cnf文件里:
innodb_buffer_pool_size=4G

#(2)关于日志方面
innodb_log_file_size
##作用:指定在一个日志组中,每个log的大小。
##结合innodb_buffer_pool_size设置其大小,25%-100%。避免不需要的刷新。
##注意:这个值分配的大小和数据库的写入速度,事务大小,异常重启后的恢复有很大的关系。一般取256M可以兼顾性能和recovery的速度。
##分配原则:几个日值成员大小加起来差不多和你的innodb_buffer_pool_size相等。上限为每个日值上限大小为4G.一般控制在几个Log文件相加大小在2G以内为佳。具体情况还需要看你的事务大小,数据大小为依据。
##说明:这个值分配的大小和数据库的写入速度,事务大小,异常重启后的恢复有很大的关系。
##设置方法:在my.cnf文件里:
innodb_log_file_size = 256M

innodb_log_files_in_group
##作用:指定你有几个日值组。
##分配原则: 一般我们可以用2-3个日值组。默认为两个
##设置方法:在my.cnf文件里:
innodb_log_files_in_group=3

innodb_log_buffer_size:
##作用:事务在内存中的缓冲,也就是日志缓冲区的大小, 默认设置即可,具有大量事务的可以考虑设置为16M。
##如果这个值增长过快,可以适当的增加innodb_log_buffer_size
##另外如果你需要处理大理的TEXT,或是BLOB字段,可以考虑增加这个参数的值。
##设置方法:在my.cnf文件里:
innodb_log_buffer_size=3M

#(3)文件IO分配,空间占用方面
innodb_file_per_table
##作用:使每个Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。默认是关闭的,建议打开(innodb_file_per_table=1)
##分配原则:只有使用不使用。但DB还需要有一个公共的表空间。
##设置方法:在my.cnf文件里:
innodb_file_per_table=1

innodb_file_io_threads
##作用:文件读写IO数,这个参数只在Windows上起作用。在Linux上只会等于4,默认即可!
##设置方法:在my.cnf文件里:
innodb_file_io_threads=4

innodb_open_files
##作用:限制Innodb能打开的表的数据。
##分配原则:这个值默认是300。如果库里的表特别多的情况,可以适当增大为1000。innodb_open_files的大小对InnoDB效率的影响比较小。但是在InnoDBcrash的情况下,innodb_open_files设置过小会影响recovery的效率。所以用InnoDB的时候还是把innodb_open_files放大一些比较合适。
##设置方法:在my.cnf文件里:
innodb_open_files=800
innodb_data_file_path
##指定表数据和索引存储的空间,可以是一个或者多个文件。最后一个数据文件必须是自动扩充的,也只有最后一个文件允许自动扩充。这样,当空间用完后,自动扩充数据文件就会自动增长(以8MB为单位)以容纳额外的数据。
#例如: innodb_data_file_path=/disk1/ibdata1:900M;/disk2/ibdata2:50M:autoextend 两个数据文件放在不同的磁盘上。数据首先放在ibdata1 中,当达到900M以后,数据就放在ibdata2中。
#设置方法,在my.cnf文件里:
innodb_data_file_path =ibdata1:1G;ibdata2:1G;ibdata3:1G;ibdata4:1G;ibdata5:1G;ibdata6:1G:autoextend

innodb_data_home_dir
#放置表空间数据的目录,默认在mysql的数据目录,设置到和MySQL安装文件不同的分区可以提高性能。
#设置方法,在my.cnf文件里:(比如mysql的数据目录是/data/mysql/data,这里可以设置到不通的分区/home/mysql下)
innodb_data_home_dir = /home/mysql

3 mysql备份

使用mysqldump备份恢复
[root@node1 ~]# mysql -e 'SHOW MASTER STATUS' #查看当前二进制文件的状态, 并记录下position的数字
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 106 | | |
+------------------+----------+--------------+------------------+

[root@node1 ~]# mysqldump --all-databases --lock-all-tables > backup.sql #备份数据库到backup.sql文件中

mysql> CREATE DATABASE TEST1; #创建一个数据库
Query OK, 1 row affected (0.00 sec)

mysql> SHOW MASTER STATUS; #记下现在的position
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 191 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

[root@node1 ~]# cp arb/mysql/mysql-bin.000003 /root #备份二进制文件
[root@node1 ~]# service mysqld stop #停止MySQL
[root@node1 ~]# rm -rf arb/mysql/* #删除所有的数据文件
[root@node1 ~]# service mysqld start #启动MySQL, 如果是编译安装的应该不能启动(需重新初始化), 如果rpm安装则会重新初始化数据库

mysql> SHOW DATABASES; #查看数据库, 数据丢失!
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)

mysql> SET sql_log_bin=OFF; #暂时先将二进制日志关闭
Query OK, 0 rows affected (0.00 sec)


mysql> source backup.sql #恢复数据,所需时间根据数据库时间大小而定

mysql> SET sql_log_bin=ON; 开启二进制日志

mysql> SHOW DATABASES; #数据库恢复, 但是缺少TEST1
+--------------------+
| Database |
+--------------------+
| information_schema |
| employees |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)

[root@node1 ~]# mysqlbinlog --start-position=106 --stop-position=191 mysql-bin.000003 | mysql employees #通过二进制日志增量恢复数据

mysql> SHOW DATABASES; #现在TEST1出现了!
+--------------------+
| Database |
+--------------------+
| information_schema |
| TEST1 |
| employees |
| mysql |
| test |
+--------------------+
5 rows in set (0.00 sec)

  转载请注明: 焱黎的博客 每日小技巧1

  目录