Below is the list of changes that have just been committed into a local
4.1 repository of mats. When mats does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.2088 05/03/24 12:10:24 mats@stripped +5 -0
Bug#8368: mysqldump needs --slave-data option
Added --slave-data option to mysqldump that behaves in a
manner similar to --master-data.
mysql-test/t/rpl_mysqldump.test
1.1 05/03/24 12:10:20 mats@stripped +32 -0
mysql-test/r/rpl_mysqldump.result
1.1 05/03/24 12:10:20 mats@stripped +216 -0
mysql-test/t/rpl_mysqldump.test
1.0 05/03/24 12:10:20 mats@stripped +0 -0
BitKeeper file /home/bk/b8368-mysql-4.1/mysql-test/t/rpl_mysqldump.test
mysql-test/r/rpl_mysqldump.result
1.0 05/03/24 12:10:20 mats@stripped +0 -0
BitKeeper file /home/bk/b8368-mysql-4.1/mysql-test/r/rpl_mysqldump.result
mysql-test/mysql-test-run.sh
1.243 05/03/24 12:10:20 mats@stripped +3 -0
Extended test script to support use of mysqldump on slave as well.
client/mysqldump.c
1.178 05/03/24 12:10:20 mats@stripped +89 -6
New option --slave-data
client/client_priv.h
1.34 05/03/24 12:10:20 mats@stripped +1 -0
New option --slave-data
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: mats
# Host: romeo.kindahl.net
# Root: /home/bk/b8368-mysql-4.1
--- 1.177/client/mysqldump.c 2005-02-25 15:11:40 +01:00
+++ 1.178/client/mysqldump.c 2005-03-24 12:10:20 +01:00
@@ -97,6 +97,9 @@
#define MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL 1
#define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2
static uint opt_mysql_port= 0, err_len= 0, opt_master_data;
+#define MYSQL_OPT_SLAVE_DATA_EFFECTIVE_SQL 1
+#define MYSQL_OPT_SLAVE_DATA_COMMENTED_SQL 2
+static uint opt_slave_data;
static my_string opt_mysql_unix_port=0;
static int first_error=0;
static DYNAMIC_STRING extended_row;
@@ -277,6 +280,19 @@
"Option automatically turns --lock-tables off.",
(gptr*) &opt_master_data, (gptr*) &opt_master_data, 0,
GET_UINT, OPT_ARG, 0, 0, MYSQL_OPT_MASTER_DATA_COMMENTED_SQL, 0, 0, 0},
+ {"slave-data", OPT_SLAVE_DATA,
+ "This causes the binary log position and filename of the slave to be "
+ "appended to the output. If equal to 1, will print it as a CHANGE MASTER "
+ "command; if equal to 2, that command will be prefixed with a comment "
+ "symbol. "
+ "This option will turn --lock-all-tables on, unless "
+ "--single-transaction is specified too (in which case a "
+ "global read lock is only taken a short time at the beginning of the dump "
+ "- don't forget to read about --single-transaction below). In all cases "
+ "any action on logs will happen at the exact moment of the dump."
+ "Option automatically turns --lock-tables off.",
+ (gptr*) &opt_slave_data, (gptr*) &opt_slave_data, 0,
+ GET_UINT, OPT_ARG, 0, 0, MYSQL_OPT_SLAVE_DATA_COMMENTED_SQL, 0, 0, 0},
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "",
(gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0,
GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096,
@@ -603,6 +619,10 @@
if (!argument) /* work like in old versions */
opt_master_data= MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL;
break;
+ case (int) OPT_SLAVE_DATA:
+ if (!argument) /* work like in old versions */
+ opt_slave_data= MYSQL_OPT_SLAVE_DATA_EFFECTIVE_SQL;
+ break;
case (int) OPT_OPTIMIZE:
extended_insert= opt_drop= opt_lock= quick= create_options=
opt_disable_keys= lock_tables= opt_set_charset= 1;
@@ -741,7 +761,7 @@
"--lock-all-tables at the same time.\n", my_progname);
return(1);
}
- if (opt_master_data)
+ if (opt_master_data || opt_slave_data)
opt_lock_all_tables= !opt_single_transaction;
if (opt_single_transaction || opt_lock_all_tables)
lock_tables= 0;
@@ -2196,8 +2216,11 @@
{
if (opt_comments)
fprintf(md_result_file,
- "\n--\n-- Position to start replication or point-in-time "
- "recovery from\n--\n\n");
+ "\n--"
+ "\n-- Position to start replication or point-in-time recovery from"
+ "\n-- [extracted from SHOW MASTER STATUS output]"
+ "\n--"
+ "\n\n");
fprintf(md_result_file,
"%sCHANGE MASTER TO MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;\n",
comment_prefix, row[0], row[1]);
@@ -2208,6 +2231,63 @@
return 0;
}
+static int do_show_slave_status(MYSQL *mysql_con)
+{
+ MYSQL_ROW row;
+ MYSQL_RES *slave;
+ const char *comment_prefix=
+ (opt_slave_data == MYSQL_OPT_SLAVE_DATA_COMMENTED_SQL) ? "-- " : "";
+ if (mysql_query_with_error_report(mysql_con, &slave, "SHOW SLAVE STATUS"))
+ {
+ my_printf_error(0, "Error: Couldn't execute 'SHOW SLAVE STATUS': %s",
+ MYF(0), mysql_error(mysql_con));
+ return 1;
+ }
+ else
+ {
+ row = mysql_fetch_row(slave);
+ if (row)
+ {
+ unsigned int f = 0;
+ int host_idx = -1, port_idx = -1;
+ int log_file_idx = -1, log_pos_idx = -1;
+ for (f = 0 ; f < slave->field_count ; ++f)
+ {
+ if (strcmp(slave->fields[f].name, "Master_Host") == 0)
+ host_idx = f;
+ else if (strcmp(slave->fields[f].name, "Master_Port") == 0)
+ port_idx = f;
+ else if (strcmp(slave->fields[f].name, "Relay_Master_Log_File") == 0)
+ log_file_idx = f;
+ else if (strcmp(slave->fields[f].name, "Exec_Master_Log_Pos") == 0)
+ log_pos_idx = f;
+ }
+ if (host_idx >= 0 && row[host_idx]
+ && port_idx >= 0 && row[port_idx]
+ && log_file_idx >= 0 && row[log_file_idx]
+ && log_pos_idx >= 0 && row[log_pos_idx])
+ {
+ if (opt_comments)
+ fprintf(md_result_file,
+ "\n--"
+ "\n-- Position to start replication or point-in-time recovery from"
+ "\n-- [extracted forom SHOW SLAVE STATUS output]"
+ "\n--"
+ "\n\n");
+ fprintf(md_result_file,
+ "%sCHANGE MASTER TO MASTER_HOST='%s', MASTER_PORT=%s, "
+ "MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;\n",
+ comment_prefix,
+ row[host_idx],row[port_idx],
+ row[log_file_idx],row[log_pos_idx]);
+ check_io(md_result_file);
+ }
+ }
+ mysql_free_result(slave);
+ }
+ return 0;
+}
+
static int do_flush_tables_read_lock(MYSQL *mysql_con)
{
@@ -2473,20 +2553,23 @@
if (!path)
write_header(md_result_file, *argv);
- if ((opt_lock_all_tables || opt_master_data) &&
+ if ((opt_lock_all_tables || opt_master_data || opt_slave_data) &&
do_flush_tables_read_lock(sock))
goto err;
- if (opt_single_transaction && start_transaction(sock, test(opt_master_data)))
+ if (opt_single_transaction
+ && start_transaction(sock, test(opt_master_data || opt_slave_data)))
goto err;
if (opt_delete_master_logs && do_reset_master(sock))
goto err;
- if (opt_lock_all_tables || opt_master_data)
+ if (opt_lock_all_tables || opt_master_data || opt_slave_data)
{
if (flush_logs && mysql_refresh(sock, REFRESH_LOG))
goto err;
flush_logs= 0; /* not anymore; that would not be sensible */
}
if (opt_master_data && do_show_master_status(sock))
+ goto err;
+ if (opt_slave_data && do_show_slave_status(sock))
goto err;
if (opt_single_transaction && do_unlock_tables(sock)) /* unlock but no commit!
*/
goto err;
--- 1.242/mysql-test/mysql-test-run.sh 2005-02-22 11:51:19 +01:00
+++ 1.243/mysql-test/mysql-test-run.sh 2005-03-24 12:10:20 +01:00
@@ -683,11 +683,14 @@
fi
MYSQL_CLIENT_TEST="$MYSQL_CLIENT_TEST --no-defaults --testcase --user=root
--socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent $EXTRA_MYSQL_CLIENT_TEST_OPT"
+MYSQL_DUMP_SLAVE="$MYSQL_DUMP --no-defaults -uroot --socket=$SLAVE_MYSOCK
--password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
+MYSQL_DUMP_MASTER="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK
--password=$DBPASSWD $EXTRA_MYSQLDUMP_OPT"
MYSQL_DUMP="$MYSQL_DUMP --no-defaults -uroot --socket=$MASTER_MYSOCK --password=$DBPASSWD
$EXTRA_MYSQLDUMP_OPT"
MYSQL_BINLOG="$MYSQL_BINLOG --no-defaults --local-load=$MYSQL_TMP_DIR
$EXTRA_MYSQLBINLOG_OPT"
MYSQL_FIX_SYSTEM_TABLES="$MYSQL_FIX_SYSTEM_TABLES --no-defaults --host=localhost
--port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root --password=$DBPASSWD
--basedir=$BASEDIR --bindir=$CLIENT_BINDIR --verbose"
MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --user=root
--password=$DBPASSWD"
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
+export MYSQL_DUMP_MASTER MYSQL_DUMP_SLAVE
export CLIENT_BINDIR MYSQL_CLIENT_TEST CHARSETSDIR
export NDB_TOOLS_DIR
export NDB_MGM
--- New file ---
+++ mysql-test/r/rpl_mysqldump.result 05/03/24 12:10:20
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2), (2,3);
SHOW SLAVE STATUS;
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
Waiting for master to send
event 127.0.0.1 root 9306 1 master-bin.000001 213 slave-relay-bin.000002 257 master-bin.000001 Yes Yes 0 0 213 257 None 0 No 0
### No CHANGE MASTER statement ###
-- MySQL dump 10.9
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 4.1.11-debug-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Position to start replication or point-in-time recovery from
-- [extracted forom SHOW SLAVE STATUS output]
--
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=9306,
MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=213;
--
-- Table structure for table `t1`
--
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a` int(11) default NULL,
`b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `t1`
--
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (1,2),(2,3);
UNLOCK TABLES;
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
### No CHANGE MASTER statement ###
-- MySQL dump 10.9
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 4.1.11-debug-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Table structure for table `t1`
--
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a` int(11) default NULL,
`b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `t1`
--
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (1,2),(2,3);
UNLOCK TABLES;
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
### Show CHANGE MASTER statement ###
-- MySQL dump 10.9
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 4.1.11-debug-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Position to start replication or point-in-time recovery from
-- [extracted forom SHOW SLAVE STATUS output]
--
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=9306,
MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=213;
--
-- Table structure for table `t1`
--
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a` int(11) default NULL,
`b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `t1`
--
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (1,2),(2,3);
UNLOCK TABLES;
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
### Show CHANGE MASTER statement as comment ###
-- MySQL dump 10.9
--
-- Host: localhost Database: test
-- ------------------------------------------------------
-- Server version 4.1.11-debug-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Position to start replication or point-in-time recovery from
-- [extracted forom SHOW SLAVE STATUS output]
--
-- CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=9306,
MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=213;
--
-- Table structure for table `t1`
--
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a` int(11) default NULL,
`b` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `t1`
--
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
LOCK TABLES `t1` WRITE;
INSERT INTO `t1` VALUES (1,2),(2,3);
UNLOCK TABLES;
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
--- New file ---
+++ mysql-test/t/rpl_mysqldump.test 05/03/24 12:10:20
source include/master-slave.inc;
#
# Bug#8368: mysqldump needs --slave-data option
#
connection master;
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1,2), (2,3);
sync_slave_with_master;
SHOW SLAVE STATUS;
--disable_query_log
select "### No CHANGE MASTER statement ###" as "";
--enable_query_log
--exec $MYSQL_DUMP_SLAVE --slave-data test
--disable_query_log
select "### No CHANGE MASTER statement ###" as "";
--enable_query_log
--exec $MYSQL_DUMP_SLAVE --slave-data=0 test
--disable_query_log
select "### Show CHANGE MASTER statement ###" as "";
--enable_query_log
--exec $MYSQL_DUMP_SLAVE --slave-data=1 test
--disable_query_log
select "### Show CHANGE MASTER statement as comment ###" as "";
--enable_query_log
--exec $MYSQL_DUMP_SLAVE --slave-data=2 test
--- 1.33/client/client_priv.h 2004-12-27 19:10:26 +01:00
+++ 1.34/client/client_priv.h 2005-03-24 12:10:20 +01:00
@@ -50,4 +50,5 @@
,OPT_NDBCLUSTER,OPT_NDB_CONNECTSTRING
#endif
,OPT_IGNORE_TABLE
+ ,OPT_SLAVE_DATA
};
| Thread |
|---|
| • bk commit into 4.1 tree (mats:1.2088) BUG#8368 | Mats Kindahl | 24 Mar |