Bug #39109 Mysql Online Backup table doesn't show correct num_object count

Submitted: 29 Aug 2008 6:26 Modified: 3 Apr 2009 3:19
Reporter: Hema Sridharan Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Backup Severity:S3 (Non-critical)
Version:mysql-6.0-backup, mysql-6.0 OS:Linux
Assigned to: Jørgen Løland CPU Architecture:Any

[29 Aug 2008 6:26] Hema Sridharan
Description:
1) Create database db1, tables, views, triggers, procedures and functions in db1.
2) Execute backup database operation.
3) Verify the online backup table to check the no.of objects(num_objects) included in the backup image.

The "num_objects" row from online backup table shows only no.of tables in the database and fails to show remaining objects.

CREATE DATABASE db1;
USE db1;
CREATE TABLE t1(id int);
CREATE TABLE t2(id int);
--echo Creating view
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE VIEW v2 AS SELECT * FROM t2;
BACKUP DATABASE db1 to 'db1.bak';
--query_vertical SELECT * FROM mysql.online_backup;
CREATE DATABASE db1;
USE db1;
CREATE TABLE t1(id int);
CREATE TABLE t2(id int);
--echo Creating view
CREATE VIEW v1 AS SELECT * FROM t1;
CREATE VIEW v2 AS SELECT * FROM t2;
BACKUP DATABASE db1 to 'db1.bak';
--query_vertical SELECT * FROM mysql.online_backup;

How to repeat:
mysql> create database db1;
mysql> use db1;
Database changed
mysql> create table t1(id int);
mysql> create table t2(id int);
mysql> create view v1 as select * from t1;
mysql> create view v2 as select * from t1;
mysql> backup database db1 to 'db1.bak';
+-----------+
| backup_id |
+-----------+
| 1         |
+-----------+
1 row in set (0.22 sec)

mysql> select * from mysql.online_backup\G
*************************** 1. row ***************************
          backup_id: 1
         process_id: 0
         binlog_pos: 0
        binlog_file: NULL
       backup_state: complete
          operation: backup
          error_num: 0
        num_objects: 2
        total_bytes: 2050
validity_point_time: 2008-08-29 05:41:00
         start_time: 2008-08-29 05:41:00
          stop_time: 2008-08-29 05:41:00
host_or_server_name: localhost
           username: root
        backup_file: db1.bak
       user_comment:
            command: backup database db1 to 'db1.bak'
            drivers: MyISAM
1 row in set (0.00 sec)

mysql> create table t3(id int);
mysql> ### triggers #####
mysql> CREATE trigger trg before insert on t1 for each row set @a:=1;
mysql> set @a:=0;
mysql> select @a;
+------+
| @a   |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql> insert into t1 values (9);
mysql> select @a;
+------+
| @a   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql> ##procedures ####
mysql> create procedure foo()
    ->   insert into t2 values (42);
Query OK, 0 rows affected (0.00 sec)

mysql> call foo();
Query OK, 1 row affected (0.00 sec)

mysql> select * from t2;
+------+
| id   |
+------+
|   42 |
+------+
1 row in set (0.00 sec)

mysql> ####functions ####
mysql> create function mul(x int, y int) returns int
    ->   return x*y;
Query OK, 0 rows affected (0.00 sec)
mysql> select mul(1,1), mul(3,5), mul(4711, 666);
+----------+----------+----------------+
| mul(1,1) | mul(3,5) | mul(4711, 666) |
+----------+----------+----------------+
|        1 |       15 |        3137526 |
+----------+----------+----------------+
1 row in set (0.00 sec)

mysql> show tables from db1;
+---------------+
| Tables_in_db1 |
+---------------+
| t1            |
| t2            |
| t3            |
| v1            |
| v2            |
+---------------+

mysql> backup database db1 to 'db11.bak';
+-----------+
| backup_id |
+-----------+
| 2         |
+-----------+
1 row in set (0.23 sec)

mysql> select * from mysql.online_backup where backup_id=2\G
*************************** 1. row ***************************
          backup_id: 2
         process_id: 0
         binlog_pos: 0
        binlog_file: NULL
       backup_state: complete
          operation: backup
          error_num: 0
        num_objects: 3
        total_bytes: 2066
validity_point_time: 2008-08-29 05:43:17
         start_time: 2008-08-29 05:43:17
          stop_time: 2008-08-29 05:43:17
host_or_server_name: localhost
           username: root
        backup_file: db11.bak
       user_comment:
            command: backup database db1 to 'db11.bak'
            drivers: MyISAM
1 row in set (0.00 sec)

If you notice from the above online backup table and one before that, the value of "num_objects" is shown as 2 and 3. This shows that num_objects displays only no.of tables in the database whereas all other objects like views, sp, sf etc are ignored.
[29 Aug 2008 6:35] Hema Sridharan
Also note if you backup only the database without any tables in it, then the num_objects from the online backup tables shows zero(0).
[29 Aug 2008 16:13] Valeriy Kravchuk
Thank you for a problem report. Verified with recent 6.0-bzr on Linux:

openxs@suse:/home2/openxs/dbs/6.0> bin/mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 6.0.7-alpha-debug Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> CREATE DATABASE db1;
Query OK, 1 row affected (0.00 sec)

mysql> USE db1;
Database changed
mysql> CREATE TABLE t1(id int);
Query OK, 0 rows affected (0.04 sec)

mysql> CREATE TABLE t2(id int);
Query OK, 0 rows affected (0.04 sec)

mysql> CREATE VIEW v2 AS SELECT * FROM t2;
Query OK, 0 rows affected (0.01 sec)

mysql> BACKUP DATABASE db1 to 'db1_1.bak';
+-----------+
| backup_id |
+-----------+
| 4         |
+-----------+
1 row in set (0.18 sec)

mysql> SELECT * FROM mysql.online_backup where backup_id=4\G
*************************** 1. row ***************************
          backup_id: 4
         process_id: 0
         binlog_pos: 0
        binlog_file: NULL
       backup_state: complete
          operation: backup
          error_num: 0
        num_objects: 2
        total_bytes: 2050
validity_point_time: 2008-08-04 08:30:17
         start_time: 2008-08-04 08:30:17
          stop_time: 2008-08-04 08:30:17
host_or_server_name: localhost
           username: root
        backup_file: db1_1.bak
       user_comment:
            command: BACKUP DATABASE db1 to 'db1_1.bak'
            engines: MyISAM
4 rows in set (0.00 sec)

mysql> create table t3(id int);
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE trigger trg before insert on t1 for each row set @a:=1;
Query OK, 0 rows affected (0.03 sec)

mysql> set @a=0;
Query OK, 0 rows affected (0.03 sec)

mysql> select @a;
+------+
| @a   |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql> insert into t1 values(9);
Query OK, 1 row affected (0.02 sec)

mysql> select @a;
+------+
| @a   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql>  create procedure foo()
    -> insert into t2 values(42);
Query OK, 0 rows affected (0.00 sec)

mysql> call foo();
Query OK, 1 row affected (0.01 sec)

mysql> select * from t2;
+------+
| id   |
+------+
|   42 |
+------+
1 row in set (0.00 sec)

mysql> create function mul(x int, y int) returns int
    ->   return x*y;
Query OK, 0 rows affected (0.03 sec)

mysql> select mul(3,5);
+----------+
| mul(3,5) |
+----------+
|       15 |
+----------+
1 row in set (0.00 sec)

mysql> show tables from db1;
+---------------+
| Tables_in_db1 |
+---------------+
| t1            |
| t2            |
| t3            |
| v2            |
+---------------+
4 rows in set (0.00 sec)

mysql> backup database db1 to 'db11.bak';
+-----------+
| backup_id |
+-----------+
| 5         |
+-----------+
1 row in set (0.38 sec)

mysql> SELECT * FROM mysql.online_backup where backup_id=5\G
*************************** 1. row ***************************
          backup_id: 5
         process_id: 0
         binlog_pos: 0
        binlog_file: NULL
       backup_state: complete
          operation: backup
          error_num: 0
        num_objects: 3
        total_bytes: 3091
validity_point_time: 2008-08-04 08:34:32
         start_time: 2008-08-04 08:34:32
          stop_time: 2008-08-04 08:34:32
host_or_server_name: localhost
           username: root
        backup_file: db11.bak
       user_comment:
            command: backup database db1 to 'db11.bak'
            engines: MyISAM
1 row in set (0.02 sec)
[9 Feb 2009 13:08] Jørgen Løland
Bug#42693 (feature request) created to make object count more fine-grained. For this bug, the object count will include:

tablespaces
databases
tables
views
all types of routines

but not privileges, users and character sets.
[11 Feb 2009 9:45] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/65862

2764 Jorgen Loland	2009-02-11
      Bug#39109 - Mysql Online Backup table doesn't show correct num_object count
      
      Previously, the num_objects column in the backup_history table showed the number of tables in the backup image. It now shows the number of objects with names (i.e, tablespace, database, table, view, routine)
[11 Feb 2009 15:35] Chuck Bell
Patch reviewed. Comments sent. Returning to in-progress while awaiting answers to questions and a new patch.
[12 Feb 2009 9:08] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/66000

2770 Jorgen Loland	2009-02-12
      Bug#39109 - Mysql Online Backup table doesn't show correct num_object count
            
      Previously, the num_objects column in the backup_history table showed the number of
      tables in the backup image. It now shows the number of objects with names (i.e,
      tablespace, database, table, view, routine)
[13 Feb 2009 15:25] Chuck Bell
Patch approved pending this request:

...

>  /// Returns total number of tables in the image.
>  inline
> -ulong Image_info::table_count() const
> +uint Image_info::table_count() const
>  {    return m_table_count;
>  }

[1] I think this and the other count functions should return ulong to be safe. The number of objects counted could exceed uint.
[16 Feb 2009 12:19] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/66476

2772 Jorgen Loland	2009-02-16
      Bug#39109 - Mysql Online Backup table doesn't show correct num_object count
                  
      Previously, the num_objects column in the backup_history table showed the number of
      tables in the backup image. It now shows the number of objects with names (i.e,
      tablespace, database, table, view, routine)
[26 Mar 2009 12:34] Bugs System
Pushed into 6.0.11-alpha (revid:alik@sun.com-20090326121822-pt84kzxxayzho4mn) (version source revid:rafal.somla@sun.com-20090302164601-znhm4tadplfi2iqu) (merge vers: 6.0.11-alpha) (pib:6)
[3 Apr 2009 3:19] Paul DuBois
Noted in 6.0.11 changelog.

Previously, the num_objects column in the backup_history table showed
only the number of tables in the backup image. It now shows the
number of objects with names (tablespaces, databases, tables, views,
stored programs).

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.046 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.