Server IP : 104.21.38.3 / Your IP : 172.71.81.230 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/mysql-test/suite/binlog/r/ |
Upload File : |
SET @old_binlog_format= @@global.binlog_format; INSTALL PLUGIN example SONAME 'ha_example.so'; ################################################################################ # Verifies if ER_BINLOG_STMT_MODE_AND_ROW_ENGINE happens by setting the binlog # format to STATEMENT and the transaction isolation level to READ COMMITTED as # such changes force Innodb to accept changes in the row format. # # When CREATE TABLE, ALTER TABLE, CREATE INDEX and CREATE TRIGGER are executed # any error should be triggered. # # In contrast, CREATE TABLE ... SELECT should trigger the following error: # ER_BINLOG_STMT_MODE_AND_ROW_ENGINE. ################################################################################ SET binlog_format = STATEMENT; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; CREATE TABLE t_row (a VARCHAR(100)) ENGINE = InnoDB; ALTER TABLE t_row ADD COLUMN b INT; CREATE TRIGGER trig_row BEFORE INSERT ON t_row FOR EACH ROW INSERT INTO t_stmt VALUES (1); CREATE INDEX i ON t_row(a); CREATE TABLE t_row_new ENGINE = InnoDB SELECT * FROM t_row; ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED. DROP TABLE t_row; ################################################################################ # Verifies if ER_BINLOG_ROW_MODE_AND_STMT_ENGINE happens by setting the binlog # format to ROW and using a engine, i.e. EXAMPLE, that only supports STATEMENT. # # When CREATE TABLE, ALTER TABLE, CREATE INDEX and CREATE TRIGGER are executed # the error ER_BINLOG_ROW_MODE_AND_STMT_ENGINE is not triggered. Note that other # errors are triggered due to restrictions in the engine. # # In contrast, CREATE TABLE ... SELECT should trigger the following error: # ER_BINLOG_ROW_MODE_AND_STMT_ENGINE. ################################################################################ SET binlog_format = ROW; CREATE TABLE t_stmt (a VARCHAR(100)) ENGINE = EXAMPLE; ALTER TABLE t_stmt ADD COLUMN b INT; ERROR 42000: This version of MySQL doesn't yet support 'ALTER TABLE' CREATE TRIGGER trig_stmt BEFORE INSERT ON t_stmt FOR EACH ROW INSERT INTO t_stmt VALUES (1); CREATE INDEX i ON t_stmt(a); ERROR 42000: Too many key parts specified; max 0 parts allowed CREATE TABLE t_stmt_new ENGINE = EXAMPLE SELECT * FROM t_stmt; ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging. DROP TABLE t_stmt; ################################################################################ # CLEAN UP # ################################################################################ flush tables; UNINSTALL PLUGIN example; SET @@global.binlog_format = @old_binlog_format; SET @@session.binlog_format = @old_binlog_format;