Как клонировать базу данных MySQL в Java - PullRequest
0 голосов
/ 19 июля 2011

Мне удалось успешно подключиться к базе данных MySQL через соединитель / j, но я не уверен, куда идти дальше. Я хочу клонировать базу данных для использования с новым поддоменом, и мне просто интересно, может ли кто-нибудь дать мне подсказку, чтобы я знал, в каком направлении идти.

Любая помощь будет высоко ценится, спасибо.

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Самым простым способом клонирования базы данных MySQL является использование стандартных инструментов администратора: mysqldump dbname > dbname.sql для получения дампа SQL, mysqladmin create clonedb для создания новой базы данных, mysql clonedb < dbname.sql для чтения в SQL для клона базы данных.

Если вы хотите сделать это с помощью Java-кода, вы делаете жизнь намного сложнее, чем нужно.

0 голосов
/ 04 июля 2019

У меня была такая же проблема.

Таким образом, одно решение с Runtime.getRuntime().exec()

String command = "mysqldump -u <your login> --password=<your password> <database name to clone> | mysql -u root --password=<your password> <new database name>";

Process p = Runtime.getRuntime().exec(new String[]{"bash","-c",command});

Недостатки: Вы должны безопасно хранить свой пароль где-нибудь. Это не зависит от системы.

Другое решение (я думаю, лучше) - запустить файл SQL, который создаст схему вашей базы данных. В MySQL вы можете легко использовать mysqldump для создания схемы для вас.

Resource resource = new ClassPathResource(defaultDatabaseSchemaFilePath);
ResourceDatabasePopulator databasePopulator = new ResourceDatabasePopulator(resource);
DataSource dataSource = multiTenantDataSource.getDataSource(dbName);
databasePopulator.execute(dataSource); 

Недостатки: в начале вашего файла SQL вам нужно добавить SET FOREIGN_KEY_CHECKS=0;, а в конце SET FOREIGN_KEY_CHECKS=1;, когда databasePopulator выполняет команды одну за другой, и, вероятно, возникнет проблема проверки внешнего ключа.

Надеюсь, это поможет кому-то в будущем.

...