两份mysql配置文件,分别是实体机生产环境下与vps下的两个版本,MySQL5.1与5.5差异不大,常规设置可以通用。后面另有二进制日志相关的配置。
注意事项:如果修改了innodb_*参数,尤其是修改了innodb_log_file_size ,启动前要删除/var/lib/mysql/ib_logfile{0,1}两个文件,启动后一定要检查一下mysql日志,是否有相关错误或警告消息。
环境 CentOS 6.x 自带的MySQL 5.1.73
在原始配置文件 /etc/my.cnf 基础上,在 [mysqld] 节内增加配置参数。实际应用中,请按硬件及负载酌情修改。
#add by feng 120418 -------------------------- #skip-locking skip-name-resolve skip-external-locking key_buffer_size = 256M #table_cache = 3072 table_open_cache = 3072 read_buffer_size = 2M read_rnd_buffer_size = 2M sort_buffer_size = 2M myisam_sort_buffer_size = 256M thread_cache_size = 8 query_cache_size= 512M query_cache_limit= 5M tmp_table_size=1024M max_heap_table_size=3000M max_allowed_packet = 16M innodb_buffer_pool_size = 512M innodb_log_file_size = 512M #innodb_additional_mem_pool_size=512M # removed in MySQL 5.7 innodb_log_buffer_size=64M max_connections=2000 max_user_connections=800 join_buffer_size = 8M open_files_limit = 65535 #tmpdir=/dev/shm max_connect_errors=1000 #add by feng 120418 end ---------------------
1-2G内存的个人VPS下配置参考
因为开启了主从复制,会产生大量二进制日志占用磁盘空间。如不需要,可以删除复制相关行。其中key_buffer_size, innodb_buffer_pool_size 设置为32M与 64M,事实上这都嫌大浪费资源了,看实际需要吧,内存资源紧张可酌情改小点。
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #add by fengyqf start skip-name-resolve innodb_log_buffer_size=32M innodb_buffer_pool_size=64M innodb_log_file_size=16M #innodb_additional_mem_pool_size=16M # removed in MySQL 5.7 key_buffer_size=32M #replication safe for innodb engine innodb_flush_logs_at_commit innodb_support_xa=1 #replication server-id=100 log-bin=mysql-bin log-error=mysql-bin.err expire_logs_days=30 sync_binlog=1 binlog_format=MIXED #add by fengyqf end [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
从服务器配置
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 skip-name-resolve server-id=201 log-bin=mysql-bin relay_log=/var/lib/mysql/mysql-relay-bin log_slave_updates=1 read_only=1 binlog_format=MIXED [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
二进制日志的定期清理或手工清理
定时清理。通过参数 expire_logs_days 指定过期天数,过期自动清理;具体天数据按实际情况定(空间与同步延迟等)。该参数可运行时设定。
expire_logs_days = 10
手工清理。root登录mysql客户端,执行purge命令。
> PURGE {MASTER | BINARY} LOGS TO 'log_name' > PURGE {MASTER | BINARY} LOGS BEFORE 'date'
其中 log_name是show master logs; 显示的日志文件名,如 mysql-bin.000001. 应用举例:
> PURGE MASTER LOGS TO 'mysql-bin.000003'; //清除mysql-bin.000003(含)之前的日志 > PURGE MASTER LOGS BEFORE '2016-11-05 10:00:00'; //清除2016-11-05 10:00:00前的日志 > PURGE MASTER LOGS BEFORE DATE_SUB(NOW(),INTERVAL 3 DAY); //清除3天前日志,使用BEFORE函数计算日期,变量的date自变量还可以为'YYYY-MM-DD hh:mm:ss'格式。详查手册
清理二进制日志的影响。如果当前服务器有一个活跃的从属服务器,该从服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。(参考)