MySQL处理过的问题

  1. 日常使用
    ##查询一个库中每张表大小
    SELECT
    table_name,
    table_rows,
    data_length + index_length,
    CONCAT(
    ROUND(
    (data_length + index_length) / 1024 / 1024,
    2
    ),
    'MB'
    )  DATA
    FROM
    information_schema. TABLES
    WHERE
    TABLE_SCHEMA = 'zhfwpt';

  2. ##设置定时任务 (事件调度器)
    show VARIABLES like '%event_scheduler%';
    SET GLOBAL event_scheduler = 1;

##主从维护(同步排查)
show slave status;
show variables like '%sync_binlog%';
看 Slave_IO_Running和Slave_SQL_Running两个线程的状态
Slave_IO线程:负责把主库的bin日志(Master_Log)内容,抄写到从库的中继日志上(Relay_Log)。Slave_IO线程比较简单,一般不容易出错,如果Slave_IO_Running显示为No,多为网络连接不上,权限不够等环境问题;
Slave_SQL线程:负责把中继日志上的语句在从库上执行一遍,相对于Slave_IO,Slave_SQL线程是比较容易出错的
示例:

  1. 手动在从库中插入一条数据,造成主从不一致,此时两个线程的状态依旧是正常的;
  2. 然后在主库也插入一条同样的数据,通知从库做相同操作,从库会出现主键重复的错误,这时候Slave_SQL_Running的状态会变为No,而Last_SQL_Error和Last_SQL_Error_Timestamp会记录错误的原因和发生时间;
  3. Slave_SQL线程会停止后续的SQL语句执行,因为它意识到往后执行会导致错误修复的难度增加;
  4. 但Slave_IO线程会继续抄log的工作,所以中继log依然是最新的;
  5. 这时候Master_Log_File: mysql-bin.000145和Relay_Master_Log_File: mysql-bin.000144之间就产生了偏差。
    当错误修复后,只需用stop slave和start slave重启下同步,Slave_SQL线程会重新的尝试工作,如果没有问题,那么Slave_SQL的状态会变回Yes(但此时主从并没有完全同步,需要一点时间)。

如何判断主从完全同步?
首先Master_Log_File和Relay_Master_Log_File所指向的文件必须一致;
其次Relay_Log_Pos和Exec_Master_Log_Pos的位置也要一致才行;
此时,Slave_SQL_Running_State:显示为wait 意思是中继日志的sql语句已经全部执行完毕,我歇菜了。

  1. ##数据库表信息查看(INFORMATION_SCHEMA库中信息查看)
    select * from INFORMATION_SCHEMA.TABLES
    where TABLE_SCHEMA = 'app' --验检查的库名
    and tablename like 'APP%' --要检查表名的规则
    and (table_name not like '%bak%' and table_name not like '%copy%' and table_name not like '%08%' and table_name not like '%18%')
    order by create_time;

  2. ##数据库恢复备份
    InnoDB存储引擎无法修改数据库名
    MyISAM修改数据库名只需要停了库修改数据目录就行了
    mysqldump -P 3306 -h 127.0.0.1 -uroot -p -q -e flowable > /opt/flowable.sql
    mysqldump -P 3306 -h 127.0.0.1 -uroot -p -q -e zhfwpt_jk --ignore-table=jg_dd_log --ignore-table=jg_dd_log2 > /opt/zhfwpt_jk1024.sql #mysqldump 备份导出数据排除某张表或多张表
    mysql -uroot -p flowable_new < /opt/flowable.sql

  3. 手动删除binlog日志
    PURGE MASTER LOGS BEFORE DATE_SUB( NOW( ), INTERVAL 7 DAY); #删除七天以前的日志
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章