下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆。
首先,创建一张测试表
mysql> create table test.t1(name varchar(10),age int);
Query OK,0 rows affected (0.10 sec)
存储过程
创建存储过程
delimiter //
CREATE procedure p1 (IN name varchar(10),IN age int)BEGIN
insert into test.t1 values(name,age);END//delimiter ;
通过查看二进制日志,可以看到该DDL语句已被记录
# at 120#161010 23:18:38 server id 1 end_log_pos 339 CRC32 0xae3dcfda Query thread_id=2 exec_time=0 error_code=0
use `test`/*!*/;SET TIMESTAMP=1476112718/*!*/;SET @@session.pseudo_thread_id=2/*!*/;SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;SET @@session.sql_mode=1075838976/*!*/;SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;/*!\C utf8*//*!*/;SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/;SET @@session.lc_time_names=0/*!*/;SET @@session.collation_database=DEFAULT/*!*/;CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(IN name varchar(10),IN age int)BEGIN
insert into test.t1 values(name,age);END
/*!*/;
DELIMITER ;
执行存储过程
mysql> call p1('tom',10);
Query OK,1 row affected (0.08sec)mysql> select * fromt1;+-------+------+
| name | age |
+-------+------+
| tom | 10 |
+-------+------+
1 rows in set (0.01 sec)
查看二进制日志中,记录的是还是call p1('tom',10)操作记录对应的SQL语句
# at 574#161010 23:23:54 server id 1 end_log_pos 653 CRC32 0xc532cfae Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1476113034/*!*/;BEGIN
/*!*/;
# at653#161010 23:23:54 server id 1 end_log_pos 833 CRC32 0x2982c7a8 Query th