1. 程式人生 > >MySQL如何在不重啟的情況下,修改不能動態修改的引數

MySQL如何在不重啟的情況下,修改不能動態修改的引數

文章目錄

如何在不重啟的情況下,修改生效不能動態修改的引數

一、簡介

問題來源於DBA內部,主從複製中提供了引數slave_skip_errors,去處理複製錯誤,
其中包含了ddl_exist_errors,在升級MySQL5.6到5.7時,這個引數配置變成了slave_skip_errors=ddl_exist_errors,線上不應該跳過這些錯誤。問題來了,這個引數不能動態更改,只能改完全部重啟資料庫,雖然可以自動化完成,但是重啟上千臺例項,有點不太現實。

二、如何解決

通過gdb工具可以完成對這個引數的修改,不需要重啟例項,指令碼如下

#!/bin/sh
backtrace="call bitmap_init(&slave_error_mask,0,2000,0)"
#backtrace="thread apply all bt"
GDB=${GDB:-/usr/bin/gdb}
# Run GDB, strip out unwanted noise.
$GDB --quiet -nx /proc/$1/exe $1 <<EOF 2>&1 |
$backtrace
EOF
/bin/sed -n \
 -e 's/^\((gdb) \)*//' \
 -e '/^#/p' \
 -e '/^Thread/p'

但前提是,要理清楚這個引數在哪裡被使用,更改此引數會帶來什麼樣的後果,此引數依賴哪些其他的引數,或者其他的引數有沒有依賴此引數的。slave_skip_errors這個引數通過如上的gdb指令碼是可以修改的,但是其他的引數需要自己去斟酌。

感興趣的歡迎加入MySQL核心交流QQ群:860945825