优化参数以及日常管理

显示插入查询的优化参数:show variables like “concurrent_insert”;+——————-+——-+| Variable_name| Value |+——————-+——-+| concurrent_insert | AUTO |+——————-+——-+set GLOBAL concurrent_insert=2;插入数据时MySQL会对插入的记录进行唯一性校验 这种校验也会降低插入记录的速度。可以在插入记录之前禁用唯一性检查。等到记录插入完毕后再开启。禁用唯一性检查的语句如下:SET UNIQUE_CHECKS=0;

重新开启唯一性检查的语句如下:

SET UNIQUE_CHECKS=1;mysql> show variables like “UNIQUE_CHECKS”;+—————+——-+| Variable_name | Value |+—————+——-+| unique_checks | ON |+—————+——-+mysql设置最大连接数量mysqlmax_connections = 1000;Query OK, 0 rows affected (0.00 sec)之前配置了mysql的主从备份 结果发现日志很多,占据了很多的磁盘空间,需要进行额外的磁盘管理 进入mysql的存储区域,查看一下数据部分的空间大小/mnt/ssd/data$ lsautomysqlmysqlmysqlmysql-bin.indexdb_user_msgmysqlmysqlmysqlmysqlperformance_schemaibdata1mysqlmysqlmysqlmysqlStockDataib_logfile0mysqlmysqlmysqlmysqlib_logfile1mysqlmysqlmysqlmysqlmysqlmysqlmysqlmysqlmysqlmysqlmysqlmysqlmysqlmysql-bin.000215mysqlmysqlmysqlmysqlmysql-bin.000216mysqlmysqlmysqlmysqlmysql-bin.000217mysqlmysqlmysqlmysqlmysql-bin.000218

显示mysql中数据部分和基本的配置部分所占用的磁盘空间

/mnt/ssd/G ./StockData636K ./performance_schema1.7M ./mysql56K./db_user_msg242G .

结果发现这其中很多的空间都被mysql-bin*文件所占用了

/mnt/ssd/G mysqlM mysqlK mysql-bin.index80Gtotal结果显示mysql-bin占用了大约80G的磁盘空间

现在我们要将这些日志清理掉

mysql> show master logs;+——————+————+| Log_name| File_size |+——————+————+| mysql-bin.000135 | 1073742116 || mysql-bin.000136 | 1073742153 |……| mysql-bin.000216 | 1073747783 || mysql-bin.000217 | 1073742128 || mysql-bin.000218 | 514734902 |+——————+————+84 rows in set (0.01 sec)这应该是主从备份一周以内的日志文件查看一下目前正在起作用的日志文件是哪一个mysql> show master status;+——————+———–+————–+——————+——————-+| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+——————+———–+————–+——————+——————-+| mysql-bin.000218 | 514734902 ||||+——————+———–+————–+——————+——————-+1 row in set (0.00 sec)如何删除多余的日志 日志的删除 对于比较繁忙的OLTP系统,由于每天生产日志量大,这些日志如果长时间不清理,将会对磁盘空间带来很大的浪费,因此,定期删除日志是DBA维护Mysql数据库的一个重要工作内容,下面将介绍几种删除日志的常见方法:

先去获得mysql中数据存储的位置:

mysql> show variables like “datadir”;+—————+—————–+| Variable_name | Value|+—————+—————–+| datadir| /var/lib/mysql/ |+—————+—————–+1 row in set (0.00 sec)这是mysql中的默认存储位置

再去查看master中日志的存储位置:

mysql> show variables like “log%”;+—————————————-+——————————-+| Variable_name| Value|+—————————————-+——————————-+| log_bin| ON|| log_bin_basename| /mnt/ssd/data/mysql-bin|| log_bin_index| /mnt/ssd/data/mysql-bin.index || log_bin_trust_function_creators| OFF|| log_bin_use_v1_row_events| OFF|| log_error| /var/log/mysql/error.log|| log_output| FILE|| log_queries_not_using_indexes| OFF|| log_slave_updates| OFF|| log_slow_admin_statements| OFF|| log_slow_slave_statements| OFF|| log_throttle_queries_not_using_indexes | 0|| log_warnings| 1|+—————————————-+——————————-+13 rows in set (0.00 sec)

查询slave节点的更新状态:

mysql> show slave status \G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: Master_User: gpx_syncMaster_Port: 3306Connect_Retry: 10Master_Log_File: mysql-bin.000218Read_Master_Log_Pos: 514734902Relay_Log_File: mysqldRelay_Log_Pos: 236Relay_Master_Log_File: mysql-bin.000218Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table: StockData.t_day_stockReplicate_Ignore_Table:Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 514734902Relay_Log_Space: 132818854Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: e61e54d8a842112d25Master_Info_File: /var/lib/mysql/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update itMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: (0.00 sec)这里面我们获得的有用的信息是:Master_Log_File: mysql-bin.000218Read_Master_Log_Pos: 514734902Relay_Log_File: mysqldRelay_Log_Pos: 236Relay_Master_Log_File: mysql-bin.000218Slave_IO_Running: YesSlave_SQL_Running: YesSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it执行“reset master;”命令,该命令将删除所有二进制日志,新日志的编号从“000001” 开始;Mysql>reset master;执行“Purge master logs to ‘mysql-bin.’” 命令,该命令将删除“” 编号之前的所有日志,下列中删除了“mysql-bin.000001”之前编号的所有日志;Mysql>purge master logs to ‘mysql-bin.000215’;执行“purge master logs before ‘yyyy-mm-dd hh24:min:ss’”命令,该命令将删除日期为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志,下列中删除了日期在“2010-05-22 01:00:00”之前的所有日志‘2010-05-22 01:00:00’;设置参数 –expire_logs_days=#(days),此参数的含义是设置日志的过期天数,过来指定的天数后日志将会被自动删除,这样将有利于减少DBA管理日志的工作量。gpx@dell:~$ sudo vim /etc/mysql/my.cnf[mysqld]expire_logs_days = 3这样,3天前的日志都会被删除,系统自动删除查看系统中对于二进制日志自动删除的过期时间mysql> show variables like “expire%”;+——————+——-+| Variable_name | Value |+——————+——-+| expire_logs_days | 3|+——————+——-+1 row in set (0.00 sec)

,抱最大的希望,为最大的努力,做最坏的打算

优化参数以及日常管理

相关文章:

你感兴趣的文章:

标签云: