Bug #83259 | All routines in the sys schema are deleted by restoring | ||
---|---|---|---|
Submitted: | 5 Oct 2016 5:10 | Modified: | 6 Oct 2016 0:41 |
Reporter: | keita nishizono | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: mysqldump Command-line Client | Severity: | S3 (Non-critical) |
Version: | 5.7.xx, 5.7.15 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[5 Oct 2016 5:10]
keita nishizono
[5 Oct 2016 6:02]
MySQL Verification Team
Hello Nishizono-San, Thank you for the report. Imho this is documented in the manual - "mysqldump does not dump the INFORMATION_SCHEMA, performance_schema, or (as of MySQL 5.7.8) sys schema by default. To dump any of these, name them explicitly on the command line. You can also name them with the --databases option.." in http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html Also, for mysqlpump - http://dev.mysql.com/doc/refman/5.7/en/mysqlpump.html Thanks, Umesh
[5 Oct 2016 7:05]
keita nishizono
Hello Umesh, thanks for your comment. >Imho this is documented in the manual - "mysqldump does not dump the INFORMATION_SCHEMA, performance_schema, or (as of MySQL 5.7.8) sys schema by default. To dump any of these, name them explicitly on the command line. You can also name them with the --databases option.." in >http://dev.mysql.com/doc/refman/5.7/en/mysqldump.html Yes, I know that. It does not matter that mysqldump does not includes the sys schema, but the problem is that mysqldump would affect the existing sys schema. For example, to set up replication, it is normal to dump all databases from the master with mysqldump and import it to the slave. But at that time, all sys's routines is deleted from the slave without notice. It is not desirable, so I think you shold add more details to the manual.
[5 Oct 2016 8:19]
Tsubasa Tanaka
I can reproduce this issue. `mysqldump --routines` does not dump sys-schema's routines, because Fix of 20902791 (https://github.com/mysql/mysql-server/commit/ded3155def2ba3356017c958c49ff58c2cae1830) 1. The dump from original server(mysqldump --all-databases --routines) has *NOT* information about sys-schema's view and sys-schema's routines. 2. New server has views and routines by mysqld --initialized, but 3. Restoring dump drops mysql.proc and doesn't have "CREATE ROUTINE" statement for sys-schema's routine. 4. As result, new server has views but doesn't have routines in sys-schema. Workaround: $ mysqldump --all-databases --routines --host=original_server > dump1.sql $ mysqldump --databases sys --routines --host=original_server > dump2.sql $ mysql --host=new_server < dump1.sql $ mysql --host=new_server < dump2.sql
[5 Oct 2016 8:30]
MySQL Verification Team
Thank you for the feedback! Thanks, Umesh
[6 Oct 2016 0:41]
keita nishizono
Thanks Tanaka-San. mysql_upgrade is also another workaround: $ mysqldump --all-databases --routines --host=original_server > dump1.sql $ mysql --host=new_server < dump1.sql $ mysql_upgrade --host=new_server ... The sys schema is already up to date (version 1.5.1). Found 0 sys functions, but expected 22. Re-installing the sys schema. Upgrading the sys schema. Checking databases. sys.sys_config OK Upgrade process completed successfully. ...