iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mysql复制和内存引擎的表是怎么样的
  • 271
分享到

mysql复制和内存引擎的表是怎么样的

2024-04-02 19:04:59 271人浏览 安东尼
摘要

Mysql复制和内存引擎的表是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当主服务器关闭并重新启动时,其内存表将变为空。要将此效

Mysql复制和内存引擎的表是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

当主服务器关闭并重新启动时,其内存表将变为空。要将此效果复制到从属服务器,在主服务器启动后第一次使用给定内存表时,它会记录一个事件,通知从属服务器必须通过将该表的DELETE语句写入二进制日志来清空该表。

当从属服务器关闭并重新启动时,其内存表将变为空。这会导致从属设备与主设备不同步,并可能导致其他故障或导致从属设备停止:

从主机接收的行格式更新和删除可能会失败,因为在“内存表”中找不到记录。

语句,例如INSERT INTO。。。从内存中选择\u表可以在主设备和从设备上插入一组不同的行。

当主库上使用内存引擎的表时,主库因为某些原因重启了。启动好之后,再打开主库的内存引擎表时,会先把里面的内容清空。所以这个时候主从状态是正常的。

但当从库被重启时,因为memory的内容没有了,所以可能会出现主从报错的现象。

实验:

一 主库异常关闭:

在主库上建表

mysql> show create table b;

+-------+-------------------------------------------------------------------------------------------------------+

| Table | Create Table                                                                                          |

+-------+-------------------------------------------------------------------------------------------------------+

| b     | CREATE TABLE `b` (

  `id` int(11) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MEMORY DEFAULT CHARSET=utf8

主库:

mysql> insert into b values (10),(20);

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0

从库:

mysql> select * from a.b;

+----+

| id |

+----+

| 10 |

| 20 |

+----+

重启主库后:

从库:

mysql> select * from a.b;

+----+

| id |

+----+

| 10 |

| 20 |

+----+

2 rows in set (0.00 sec)

这时再去主库上观察:

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------------------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |

+------------------+----------+--------------+------------------+-------------------------------------------+

| mysql-bin.000012 |      194 |              |                  | 48dfe7f5-3ab5-11e7-b3fa-525400199b09:1-23 |

+------------------+----------+--------------+------------------+-------------------------------------------+

1 row in set (0.00 sec)

mysql> select  *from a.b;

Empty set (0.00 sec)

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------------------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |

+------------------+----------+--------------+------------------+-------------------------------------------+

| mysql-bin.000012 |      478 |              |                  | 48dfe7f5-3ab5-11e7-b3fa-525400199b09:1-24 |

+------------------+----------+--------------+------------------+-------------------------------------------+

1 row in set (0.00 sec)

mysql> show binlog  events in 'mysql-bin.000012';

+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+

| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                                               |

+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+

| mysql-bin.000012 |   4 | FORMat_desc    | 169454186 |         123 | Server ver: 5.7.16.k1-ucloudrel1-log, Binlog ver: 4                |

| mysql-bin.000012 | 123 | Previous_gtids | 169454186 |         194 | 48dfe7f5-3ab5-11e7-b3fa-525400199b09:1-23                          |

| mysql-bin.000012 | 194 | Gtid           | 169454186 |         259 | SET @@SESSION.GTID_NEXT= '48dfe7f5-3ab5-11e7-b3fa-525400199b09:24' |

| mysql-bin.000012 | 259 | Query          | 169454186 |         327 | BEGIN                                                              |

| mysql-bin.000012 | 327 | Query          | 169454186 |         409 | DELETE FROM `a`.`b`                                                |

| mysql-bin.000012 | 409 | Query          | 169454186 |         478 | COMMIT                                                             |

+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+

6 rows in set (0.00 sec)

再次去从库观察:

mysql> select * from a.b;

Empty set (0.00 sec)

这时主从的状态也是正常的。

二 从库启常重启:

主库上:

mysql> insert into a.b values (10),(20);

Query OK, 2 rows affected (0.00 sec)

Records: 2  Duplicates: 0  Warnings: 0

从库:

mysql> select * from a.b;

+----+

| id |

+----+

| 10 |

| 20 |

+----+

2 rows in set (0.00 sec)

重启从库后:

mysql> select  *from a.b;

Empty set (10.00 sec)

主库:

mysql> delete from a.b where id=10;

Query OK, 1 row affected (0.00 sec)

从库:

mysql> show slave status \G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.25.170.106

                  Master_User: ucloudbackup

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000012

          Read_Master_Log_Pos: 1049

               Relay_Log_File: mysql-relay.000024

                Relay_Log_Pos: 360

        Relay_Master_Log_File: mysql-bin.000012

             Slave_IO_Running: Yes

            Slave_SQL_Running: No

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:

                   Last_Errno: 1032

                   Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 0 failed executing transaction '48dfe7f5-3ab5-11e7-b3fa-525400199b09:26' at master log mysql-bin.000012, end_log_pos 980. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

                 Skip_Counter: 0

分析:

重启主库,并且访问a.b表时, mysqlbinlog中会记录下面的内容:

# at 327

#170518 19:16:07 server id 10  end_log_pos 410 CRC32 0xc908da54  Query thread_id=5 exec_time=499 error_code=0

SET TIMESTAMP=1495106167;

DELETE FROM `a`.`b`

;

通过跟踪可知:

#0  open_table_entry_fini (thd=0x7f3f1c000d80, share=0x7f3f14045b50, entry=0x7f3f1c00eef0) at /data/mysql-5.7.17/sql/sql_base.cc:4325

#1  0x00000000014968ac in open_table (thd=0x7f3f1c000d80, table_list=0x7f3f1c006580, ot_ctx=0x7f3f40092370) at /data/mysql-5.7.17/sql/sql_base.cc:3551

#2  0x000000000149912c in open_and_process_table (thd=0x7f3f1c000d80, lex=0x7f3f1c003078, tables=0x7f3f1c006580, counter=0x7f3f1c003138, flags=0, prelocking_strategy=0x7f3f40092470,

    has_prelocking_list=false, ot_ctx=0x7f3f40092370) at /data/mysql-5.7.17/sql/sql_base.cc:5108

#3  0x000000000149a1ce in open_tables (thd=0x7f3f1c000d80, start=0x7f3f40092430, counter=0x7f3f1c003138, flags=0, prelocking_strategy=0x7f3f40092470) at /data/mysql-5.7.17/sql/sql_base.cc:5719

#4  0x000000000149b4fb in open_tables_for_query (thd=0x7f3f1c000d80, tables=0x7f3f1c006580, flags=0) at /data/mysql-5.7.17/sql/sql_base.cc:6494

#5  0x00000000015208fe in execute_sqlcom_select (thd=0x7f3f1c000d80, all_tables=0x7f3f1c006580) at /data/mysql-5.7.17/sql/sql_parse.cc:5166

#6  0x000000000151a193 in mysql_execute_command (thd=0x7f3f1c000d80, first_level=true) at /data/mysql-5.7.17/sql/sql_parse.cc:2794

#7  0x00000000015218f6 in mysql_parse (thd=0x7f3f1c000d80, parser_state=0x7f3f40093690) at /data/mysql-5.7.17/sql/sql_parse.cc:5611

#8  0x000000000151709c in dispatch_command (thd=0x7f3f1c000d80, com_data=0x7f3f40093Df0, command=COM_QUERY) at /data/mysql-5.7.17/sql/sql_parse.cc:1461

#9  0x0000000001515f8e in do_command (thd=0x7f3f1c000d80) at /data/mysql-5.7.17/sql/sql_parse.cc:999

#10 0x0000000001645460 in handle_connection (arg=0x43de0e0) at /data/mysql-5.7.17/sql/conn_handler/connection_handler_per_thread.cc:300

#11 0x0000000001cbe494 in pfs_spawn_thread (arg=0x4474250) at /data/mysql-5.7.17/storage/perfschema/pfs.cc:2188

#12 0x00007f3f4e629dc5 in start_thread () from /lib64/libpthread.so.0

#13 0x00007f3f4d4f473d in clone () from /lib64/libc.so.6

是在sql/sql_base.cc:open_table_entry_fini函数中实现的添加delete

具体是体现在:

 4345     if (mysql_bin_log.is_open())

 4346     {

 4347       bool error= false;

 4348       String temp_buf;

 4349       error= temp_buf.append("DELETE FROM ");

 4350       append_identifier(thd, &temp_buf, share->db.str, strlen(share->db.str));

 4351       error= temp_buf.append(".");

 4352       append_identifier(thd, &temp_buf, share->table_name.str,

 4353                         strlen(share->table_name.str));

 4354       if (mysql_bin_log.write_dml_directly(thd, temp_buf.c_ptr_safe(),

 4355                                            temp_buf.length()))

 4356         return TRUE;

 4357       if (error)

 4358       {

 4359        

 4364         sql_print_error("When opening HEAP table, could not allocate memory "

 4365                         "to write 'DELETE FROM `%s`.`%s`' to the binary log",

 4366                         share->db.str, share->table_name.str);

 4367         delete entry->triggers;

 4368         return TRUE;

 4369       }

直接在mysqlbinlog中写了delete 语句。

对于有memory引擎的表,做主从时可能会有的问题:

1 逻辑备份:会dump出来当时memory表里有的内容,但他不支持事务,所以有可能数据是不一样的

2 物理备份:memory的表只有frm文件,所以里面的内容一定是空的

所以两种方式都不能保证可以直接做出来从库。

最好的方法是:在主从复制中还是不要使用memory引擎的表。真要用的话,需要了解他的影响。

关于mysql复制和内存引擎的表是怎么样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: mysql复制和内存引擎的表是怎么样的

本文链接: https://www.lsjlt.com/news/66223.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql复制和内存引擎的表是怎么样的
    mysql复制和内存引擎的表是怎么样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。当主服务器关闭并重新启动时,其内存表将变为空。要将此效...
    99+
    2024-04-02
  • MySQL索引与事务和视图以及存储引擎MylSAM和lnnoDB是怎样的
    本篇文章给大家分享的是有关MySQL索引与事务,视图及存储引擎MylSAM和lnnoDB,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。MySQ...
    99+
    2024-04-02
  • MySql中的存储引擎和索引
    目录一、MySql的逻辑结构二、什么是存储引擎MySQL支持的存储引擎三、操作四、数据库的索引索引的分类五、索引操作一、MySql的逻辑结构 MySQL体系结构分为四层:分别是连接层...
    99+
    2022-11-13
    MySql存储引擎 MySql索引
  • MySQL的存储引擎InnoDB和MyISAM
    目录1. MyISAM底层存储1.1 MyISAM底层存储(非聚集索引方式)1.2 InnoDB底层存储(聚集索引方式)2. InnoDB与MyISAM简介3. MyISAM与Inn...
    99+
    2024-04-02
  • mysql常用的存储引擎是什么
    这篇文章将为大家详细讲解有关mysql常用的存储引擎是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。MySql中的存储引擎有MyISAM引擎,MyISAM Merge...
    99+
    2024-04-02
  • mysql 转换表的存储引擎脚本
    vi convert_tbale_engine.sh #!/bin/bash DB=test USER=root PASSWORD=123456 HOST=192.168.1.10 MYSQL_BIN=/u...
    99+
    2024-04-02
  • 什么是存储引擎以及如何查看MySQL安装支持的存储引擎列表?
    它可以被定义为数据库管理系统(DBMS)用来处理不同的SQL操作(如创建、读取、更新和删除数据库中的数据)的软件组件。换句话说,它被DBMS用来管理数据库中的信息。最常用的存储引擎是InnoDB,它也是MySQL5.5及更高版本的默认存储引...
    99+
    2023-10-22
  • 常用的MySQL存储引擎是什么
    这篇文章将为大家详细讲解有关常用的MySQL存储引擎是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。最常用的存储引擎是:  MyISAM:默认的MySQL插件式存储引...
    99+
    2024-04-02
  • 正则表达式引擎的内部工作机制是什么
    这篇文章给大家分享的是有关正则表达式引擎的内部工作机制是什么的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。了解正则表达式引擎的必要性:知道正则表达式引擎是如何工作的有助于你很快理解为何某个正则表达式不像你期望的那...
    99+
    2023-06-17
  • MySQL存储引擎的区别是什么
    MySQL存储引擎的区别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。  MySQL有多种存储引擎,每种存储引擎有各自的...
    99+
    2024-04-02
  • mysql存储引擎的作用是什么
    MySQL存储引擎是用来管理数据存储和访问的组件,它定义了数据如何存储、检索、更新和删除,不同的存储引擎有不同的特性和性能表现。存储...
    99+
    2024-03-02
    mysql
  • MySQL表类型 存储引擎 的选择
    目录1、查看当前数据库支出的存储引擎方法1:方法2:2、ENGINE={存储引起类型}  创建表的时候,设置存储引擎3、alter able tablename engin...
    99+
    2024-04-02
  • 如何更改MySQL表的存储引擎?
    MySQL ALTER TABLE 语句可以更改表的存储引擎,如下 -mysql> ALTER TABLE Student ENGINE = 'InnoDB'; Query OK, 0 rows affected (0...
    99+
    2023-10-22
  • mysql如何查看表的存储引擎
    可以使用以下语句来查看MySQL表的存储引擎:```sqlSHOW TABLE STATUS LIKE 'table_name';`...
    99+
    2023-08-31
    mysql
  • MySQL改变表的存储引擎方法
    改变MySQL表的存储引擎方法 1、最简单的方法是使用alter table语句,例如 alter table tablename ENGINE = InnoDB; 上述方法可以适用于任何存储引擎的...
    99+
    2023-09-08
    mysql 数据库 sql
  • Node和JavaScript中的模板引擎是怎样的
    本篇文章给大家分享的是有关Node/JavaScript中的模板引擎是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。简介我们将介绍如何用...
    99+
    2024-04-02
  • MySQL基础中逻辑架构图解和InnoDB存储引擎的过程是怎样的
    MySQL基础中逻辑架构图解和InnoDB存储引擎的过程是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、MySQL逻...
    99+
    2024-04-02
  • mysql中InnoDB存储引擎指的是什么
    这篇文章主要介绍了mysql中InnoDB存储引擎指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mysql中InnoDB存储引擎1、说明MySQL默认事务型存储引擎...
    99+
    2023-06-15
  • 怎么理解MySQL中多源复制引起的内存泄漏
    怎么理解MySQL中多源复制引起的内存泄漏,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景 : MySQL-5.7, 所有的小版本(&l...
    99+
    2024-04-02
  • 什么是MariaDB的存储引擎
    MariaDB是一个开源的关系数据库管理系统,存储引擎是其中一个重要的组成部分。存储引擎是数据库管理系统用来管理数据存储和检索的插件...
    99+
    2024-04-09
    MariaDB
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作