您的当前位置:首页正文

Mysql log_slave_updates 参数

2023-11-09 来源:画鸵萌宠网

not log to its own binary log any updates that are received from a master server. This option tells the slave to log the updates performed by its SQL thread to its own binary log. For this option to have any effect, the slave must also be started with the --log-bin option to enable binary logging. Prior to MySQL 5.5, the server would not start when using the --log-slave-updates option without also starting the server with the --log-bin option, and would fail with an error; in MySQL 5.5, only a warning is generated. (Bug #44663) --log-slave-updates is used when you want to chain replication servers. For example, you might want to set up replication servers using this arrangement:A -> B -> CHere, A serves as the master for the slave B, and B serves as the master for the slave C. For this to work, B must be both a master and a slave. You must start both A and B with --log-bin to enable binary logging, and B with the --log-slave-updates option so that updates received from A are logged by B to its binary log.通常情况,从服务器从主服务器接收到的更新不记入它的二进制日志。该选项告诉从服务器将其SQL线程执行的更新记入到从服务器自己的二进制日志。为了使该选项生效,还必须用--logs-bin选项启动从服务器以启用二进制日志。如果想要应用链式复制服务器,应使用--logs-slave-updates。例如,可能你想要这样设置:A -> B -> C也就是说,A为从服务器B的主服务器,B为从服务器C的主服务器。为了能工作,B必须既为主服务器又为从服务器。你必须用--logs-bin启动A和B以启用二进制日志,并且用--logs-slave-updates选项启动B。

 

这样来自A的事务能记录在B的二进制文件中,再传送给C

Mysql log_slave_updates 参数

标签:

小编还为您整理了以下内容,可能对您也有帮助:

MySQL主从复制几个重要的启动选项

MySQL主从复制几个重要的启动选项

(1)log-slave-updates

log-slave-updates这个参数用来配置从服务器的更新是否写入二进制日志,这个选项默认是不打开的,但是,如果这个从服务器B是服务器A的从服务器,同时还作为服务器C的主服务器,那么就需要开发这个选项,这样它的从服务器C才能获得它的二进制日志进行同步操作

(2)master-connect-retry

master-connect-retry这个参数是用来设置在和主服务器连接丢失的时候,重试的时间间隔,默认是60秒

(3)read-only

read-only是用来普通用户对从数据库的更新操作,以确保从数据库的安全性,不过如果是超级用户依然可以对从数据库进行更新操作

(4)slave-skip-errors

在复制过程中,由于各种的原因,从服务器可能会遇到执行BINLOG中的SQL出错的情况,在默认情况下,服务器会停止复制进程,不再进行同步,等到用户自行来处理。

Slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。

--slave-skip-errors=[err1,err2,…….|ALL]

但必须注意的是,启动这个参数,如果处理不当,很可能造成主从数据库的数据不同步,在应用中需要根据实际情况,如果对数据完整性要求不是很严格,那么这个选项确实可以减轻维护的成本

MySQL主从复制几个重要的启动选项

标签:

mysql不重启的情况下修改参数变量

通常来说,更新mysql配置my.cnf需要重启mysql才能生效,但是有些时候mysql在线上,不一定允许你重启,这时候应该怎么办呢?
看一个例子:
mysql>
show
variables
like
'log_slave_updates';
+-------------------+-------+
|
Variable_name
|
Value
|
+-------------------+-------+
|
log_slave_updates
|
OFF
|
+-------------------+-------+
row
in
set
(0.00
sec)
mysql>
set
global
log_slave_updates=1;
ERROR
1238
(HY000):
Variable
'log_slave_updates'
is
a
read
only
variable
看到了吧?报错了!
后来查了一下资料,发现有一个叫gdb的东西,感觉相当牛X,可以实现在线更改mysql参数,请看例子:
mysql>
system
gdb
-p
$(pidof
mysqld)
-ex
"set
opt_log_slave_updates=1"
-batch
mysql>
show
variables
like
'log_slave_updates';
+-------------------+-------+
|
Variable_name
|
Value
|
+-------------------+-------+
|
log_slave_updates
|
ON
|
+-------------------+-------+
row
in
set
(0.00
sec)
但是在一些可重复的参数,不能直接用set更改,那这时候又要怎么办呢?老外给了一个解决方案:
复制代码
代码如下:
mysql>
show
slave
status
\G
...
Replicate_Do_DB:
test
...
mysql>
system
gdb
-p
$(pidof
mysqld)
-ex
'call
rpl_filter->add_do_db(strp("hehehe"))'
-batch
mysql>
show
slave
status
\G
...
Replicate_Do_DB:
test,hehehe
...

mysql不重启的情况下修改参数变量

通常来说,更新mysql配置my.cnf需要重启mysql才能生效,但是有些时候mysql在线上,不一定允许你重启,这时候应该怎么办呢?
看一个例子:
mysql>
show
variables
like
'log_slave_updates';
+-------------------+-------+
|
Variable_name
|
Value
|
+-------------------+-------+
|
log_slave_updates
|
OFF
|
+-------------------+-------+
row
in
set
(0.00
sec)
mysql>
set
global
log_slave_updates=1;
ERROR
1238
(HY000):
Variable
'log_slave_updates'
is
a
read
only
variable
看到了吧?报错了!
后来查了一下资料,发现有一个叫gdb的东西,感觉相当牛X,可以实现在线更改mysql参数,请看例子:
mysql>
system
gdb
-p
$(pidof
mysqld)
-ex
"set
opt_log_slave_updates=1"
-batch
mysql>
show
variables
like
'log_slave_updates';
+-------------------+-------+
|
Variable_name
|
Value
|
+-------------------+-------+
|
log_slave_updates
|
ON
|
+-------------------+-------+
row
in
set
(0.00
sec)
但是在一些可重复的参数,不能直接用set更改,那这时候又要怎么办呢?老外给了一个解决方案:
复制代码
代码如下:
mysql>
show
slave
status
\G
...
Replicate_Do_DB:
test
...
mysql>
system
gdb
-p
$(pidof
mysqld)
-ex
'call
rpl_filter->add_do_db(strp("hehehe"))'
-batch
mysql>
show
slave
status
\G
...
Replicate_Do_DB:
test,hehehe
...

keepalive的实现mysql高可用为什么要设置两个backup

1、配置文件
master my.cnf 主要参数
log_slave_updates
log-bin = mysql-bin
server-id = 1
binlog-ignore-db=mysql
#auto_increment_increment = 2
#auto_increment_offset = 2
slave my.cnf 主要参数
log_slave_updates
log-bin = mysql-bin
server-id = 2
binlog-ignore-db=mysql
#auto_increment_increment = 2
#auto_increment_offset = 1
注:
log_slave_updates 同步数据时也写入日志,二进制记录id号,互为主从时时不会引起循环。建议开启方便实施日志恢复。 可选
slave-skip-errors 跳过错误,可以通过=指定特定的错误,如:slave-skip-errors=1062 可选
log-bin = mysql-bin 开启二进制日志,必须开启,主从同步主要是通过二进制日志。 必须
sync_binlog=n 设置二进制日志在写入多少此后与硬盘同步,1 为最安全的也是效率最低的,根据实际情况设定 可选
server-id 设置mysql的id号,主从不能相同。 必须

keepalive的实现mysql高可用为什么要设置两个backup

1、配置文件
master my.cnf 主要参数
log_slave_updates
log-bin = mysql-bin
server-id = 1
binlog-ignore-db=mysql
#auto_increment_increment = 2
#auto_increment_offset = 2
slave my.cnf 主要参数
log_slave_updates
log-bin = mysql-bin
server-id = 2
binlog-ignore-db=mysql
#auto_increment_increment = 2
#auto_increment_offset = 1
注:
log_slave_updates 同步数据时也写入日志,二进制记录id号,互为主从时时不会引起循环。建议开启方便实施日志恢复。 可选
slave-skip-errors 跳过错误,可以通过=指定特定的错误,如:slave-skip-errors=1062 可选
log-bin = mysql-bin 开启二进制日志,必须开启,主从同步主要是通过二进制日志。 必须
sync_binlog=n 设置二进制日志在写入多少此后与硬盘同步,1 为最安全的也是效率最低的,根据实际情况设定 可选
server-id 设置mysql的id号,主从不能相同。 必须

MySQL内存相关参数

相关查看命令

sql> show global variables like 'innodb_buffer_pool_size';

sql> show global status like 'Innodb_buffer_pool_pages_data';

sql> show global status like 'Innodb_page_size';

有的参数对应不同引擎,比如对于innodb引擎的,都是innodb_打头。

例如:

innodb_buffer_pool_size = 81920M

join_buffer_size = 1024M

innodb_sort_buffer_size =1024M

sort_buffer_size = 2048M

read_rnd_buffer_size = 2048M

innodb_log_buffer_size = 128M

innodb_log_file_size =2048M

innodb_log_files_in_group=10

bulk_insert_buffer_size=4096M

myisam_sort_buffer_size = 512M

myisam_max_sort_file_size = 10G

thread_cache_size = 300

ft_min_word_len = 1 #for chinese full text search

query_cache_size = 512M

query_cache_limit = 4M

query_cache_type = 0

query_cache_min_res_unit = 2k

thread_stack = 512K

tmp_table_size = 3G

max_heap_table_size = 3G

long_query_time = 3

log-slave-updates

max_binlog_cache_size = 8M

调优参考计算方法:

val = Innodb_buffer_pool_pages_data / Innodb_buffer_pool_pages_total * 100%

val > 95% 则考虑增大 innodb_buffer_pool_size, 建议使用物理内存的75%

val < 95% 则考虑减小 innodb_buffer_pool_size, 建议设置为:Innodb_buffer_pool_pages_data * Innodb_page_size * 1.05 / (1024*1024*1024)

设置命令:set global innodb_buffer_pool_size = 2097152; //缓冲池字节大小,单位kb,如果不设置,默认为128M

设置要根据自己的实际情况来设置,如果设置的值不在合理的范围内,并不是设置越大越好,可能设置的数值太大体现不出优化效果,反而造成系统的swap空间被占用,导致操作系统变慢,降低sql查询性能。

修改配置文件的调整方法,修改my.cnf配置:

innodb_buffer_pool_size = 2147483648  #设置2G

innodb_buffer_pool_size = 2G  #设置2G

innodb_buffer_pool_size = 500M  #设置500M

MySQL5.7及以后版本,改参数时动态的,修改后,无需重启MySQL,但是低版本,静态的,修改后,需要重启MySQL。

学会设置五大类MySQL参数

  (一)连接

  连接通常来自Web服务器 下面列出了一些与连接有关的参数 以及该如何设置它们

   max_connections

  这是Web服务器允许的最大连接数 记住每个连接都要使用会话内存(关于会话内存 文章后面有涉及)

   max_packet_allowed

  最大数据包大小 通常等于你需要在一个大块中返回的最大数据集的大小 如果你在使用远程mysqlmp 那它的值需要更大

   aborted_connects

  检查系统状态的计数器 确定其没有增长 如果数量增长说明客户端连接时遇到了错误

   thread_cache_size

  入站连接会在MySQL中创建一个新的线程 因为MySQL中打开和关闭连接都很廉价 速度也快 它就没有象其它数据库 如Oracle那么多持续连接了 但线程预先创建并不会节约时间 这就是为什么要MySQL线程缓存的原因了

  如果在增长请密切注意创建的线程 让你的线程缓存更大 对于 或 的thread_cache_size 内存占用也不多

  (二)查询缓存

  MySQL中的缓存查询包括两个解析查询计划 以及返回的数据集 如果基础表数据或结构有变化 将会使查询缓存中的项目无效

   query_cache_min_res_unit

  MySQL参数中query_cache_min_res_unit查询缓存中的块是以这个大小进行分配的 使用下面的公式计算查询缓存的平均大小 根据计算结果设置这个变量 MySQL就会更有效地使用查询缓存 缓存更多的查询 减少内存的浪费

   query_cache_size

  这个参数设置查询缓存的总大小

   query_cache_limit

  这个参数告诉MySQL丢掉大于这个大小的查询 一般大型查询还是比较少见的 如运行一个批处理执行一个大型报表的统计 因此那些大型结果集不应该填满查询缓存

  qcache hit ratio = qcache_hits / (qcache_hits + _select)

  使用

  SQL> show status like qcache% ;

  SQL> show status like _% ;

  找到这些变量

  average query size = (query_cache_size qcache_free_memory)/qcache_queries_in_cache

  使用

  SQL> show variables like query% ;

  qcache_* status variables you can get with:

  SQL> show status like qcache% ;

  获取query_cache_size的值

  (三)临时表

  内存速度是相当快的 因此我们希望所有的排序操作都在内存中进行 我们可以通过调整查询让结果集更小以实现内存排序 或将变量设置得更大

  tmp_table_size

  max_heap_table_size

  无论何时在MySQL中创建临时表 它都会使用这两个变量的最小值作为临界值 除了在磁盘上构建临时表外 还会创建许多会话 这些会话会抢占有的资源 因此最好是调整查询而不是将这些参数设置得更高 同时 需要注意的是有BLOB或TEXT字段类型的表将直接写入磁盘 深入浅出MySQL双向复制技术

  (四)会话内存

  MySQL中每个会话都有其自己的内存 这个内存就是分配给SQL查询的内存 因此你想让它变得尽可能大以满足需要 但你不得不平衡同一时间数据库内一致性会话的数量 这里显得有点黑色艺术的是MySQL是按需分配缓存的 因此 你不能只添加它们并乘以会话的数量 这样估算下来比MySQL典型的使用要大得多 最佳做法是启动MySQL 连接所有会话 然后继续关注顶级会话的VIRT列 mysqld行的数目通常保持相对稳定 这就是实际的内存总用量 减去所有的静态MySQL内存区域 就得到了实际的所有会话内存 然后除以会话的数量就得到平均值

   read_buffer_size

  缓存连续扫描的块 这个缓存是跨存储引擎的 不只是MyISAM表

   sort_buffer_size

  执行排序缓存区的大小 最好将其设置为 M M 然后在会话中设置 为一个特定的查询设置更高的值

   join_buffer_size

  执行联合查询分配的缓存区大小 将其设置为 M M大小 然后在每个会话中再单独按需设置

   read_rnd_buffer_size

  用于排序和order by操作 最好将其设置为 M 然后在会话中可以将其作为一个会话变量设置为更大的值

  (五)慢速查询日志

  慢速查询日志是MySQL很有用的一个特性

   log_slow_queries

  MySQL参数中log_slow_queries参数在f文件中设置它 将其设置为on 默认情况下 MySQL会将文件放到数据目录 文件以 主机名 slow log 的形式命名 但你在设置这个选项的时候也可以为其指定一个名字

   long_query_time

  默认值是 秒 你可以动态设置它 值从 到将其设置为on 如果数据库启动了 默认情况下 日志将关闭 截至 和安装了Google补丁的版本 这个选项可以以微秒设置 这是一个了不起的功能 因为一旦你消除了所有查询时间超过 秒的查询 说明调整非常成功 这样可以帮助你在问题变大之前消除问题SQL

   log_queries_not_using_indexes

  开启这个选项是个不错的主意 它真实地记录了返回所有行的查询

  小结

lishixin/Article/program/MySQL/201311/29371

Top