programing

mysql에 데이터가 없는 데이터베이스 구조 복사(빈 테이블 포함)

goodsources 2022. 10. 10. 18:33
반응형

mysql에 데이터가 없는 데이터베이스 구조 복사(빈 테이블 포함)

MySQL에서 데이터 없이 데이터베이스 구조를 복사할 수 있는 방법이 있습니까? 따라서 새 데이터베이스는 복사된 데이터베이스와 같지만 빈 테이블이 있습니다.

몇 가지 제안을 받은 후 명령어를 시도했지만 구문 오류가 발생했습니다.username = root그리고.password = nothing. 디폴트인 것 같아요.나는 명령을 따르려고 한다.

mysqldump -u root -p -d xyz_db | mysql -u root -p -Dnew_db

명령에서 놓치거나 잘못 배치한 것이 무엇입니까?

mysqldump -u user -ppass -d olddb | mysql -u user -ppass -D newdb

새 데이터베이스가 이미 있어야 합니다.-dmysqldump 명령의 플래그를 지정하면 데이터 복사가 금지됩니다.

깃발 사이에 띄어쓰기가 없다.-p패스워드를 입력합니다.

mysqldump를 사용하여 백업을 수행하고 명령줄에서 mysql을 사용하여 복원할 수 있습니다.

백업 데이터베이스용

$ mysqldump -u root-pPassword -P3309 --routines --no-data testdb > "d:\dbwithnodata.sql"

데이터베이스 복원용

$ mysql -u root-pPassword -P3309 newdb < "d:\dbwithnodata.sql"

MYSQL 데이터베이스 구조를 다음과 같이 백업할 수 있습니다.

mysqldump -u username –p  -d database_name > backup.sql

(커맨드 라인에서 패스워드를 입력하지 말아 주세요.이것은, 시큐러티의 리스크로 연결됩니다.기본적으로는 MYSQL이 비밀번호를 요구합니다.)또한 데이터베이스에 테이블을 작성할 수 있습니다.

mysql -u username -p new_database < backup.sql

이제 파이프를 사용하여 첫 번째 명령어의 출력을 두 번째 명령어의 출력으로 제공할 수 있으며 더 이상 필요하지 않습니다.backup.sql

mysqldump -u username –p  -d database_name|mysql -u username -p new_database

의 모든 테이블이 다음 위치에 생성됩니다.new_database데이터를 사용하지 않습니다.

electrictboolbox.com/mysqldump-schema-only 에서 :

데이터가 없는 모든 테이블의 데이터베이스 구조 덤프 -d 플래그를 추가하여 출력에 데이터가 포함되지 않음을 나타냅니다.여기서 "my database"는 덤프할 데이터베이스의 이름이고 "someuser"는 데이터베이스 연결에 사용되는 로그인 이름입니다.다음 명령어는 지정된 MySQL 데이터베이스 내의 모든 테이블의 테이블 구조를 덤프합니다.

$ mysqldump -d -u someuser -p mydatabase

-d 플래그는 덤프에 데이터를 포함하지 않음을 나타냅니다.또는 기억하기 쉬운 경우 --no-data를 대신 사용할 수 있습니다.

$ mysqldump --no-data -u someuser -p mydatabase

-u 플래그는 패스워드가 제공되는 사용자 이름과 -p 플래그를 나타냅니다.를 누르면 비밀번호를 입력하라는 메시지가 나타납니다.

또는 명령줄에 비밀번호를 입력할 수도 있지만 -p 플래그와 비밀번호 사이에는 공백이 없어야 합니다.예를 들어, 패스워드가 「애플」인 경우는, 다음의 순서에 따릅니다.

$ mysqldump --no-data -u someuser -papples mydatabase
$ mysqldump -d -u someuser -p mydatabase > mydatabase.sql # This will output to a sql file

이것을 사용해 보세요.

$ mysqldump --no-data -h localhost -u root -p database_name > imported_db_name.sql

매뉴얼에 기재되어 있는 바와 같이 데이터베이스 복사에서는 덤프를 mysql 클라이언트에 직접 파이프로 연결할 수 있습니다.

mysqldump db_name | mysql new_db_name 

MyISAM을 사용하고 있다면 파일을 복사할 수 있지만 추천하지 않습니다.좀 수상하네요.

다양한 좋은 답변에서 통합

mysqldump 명령어와 mysql 명령어 모두 다음과 같은 연결 상세 설정 옵션을 사용할 수 있습니다.

mysqldump -u <user name> --password=<pwd> <original db> | mysql -u <user name> -p <new db>

::mysqldump -u root -pmypassword old_database | mysql -u root -pmypassowrd new_database

블로그 링크

mysqldump -d PROCEDURE 「」, 「」 수 에, 하지 않습니다.'old_db'.tb_name 바꿔서 할 것 같아요.'new_db'.tb_name

mysql -u user -ppass -e "CREATE DATABASE new_db" 

mysqldump -u user -ppass -d old_db |     # pull structure  -d flag  
sed "s/\`old_db\`\./\`new_db\`\./g" |    # solve foreign_keys, triggers etc 
sed 's/AUTO_INCREMENT=[0-9]\+/''/g' |    # reset indexes
mysql -u user -ppass new_db              # push structure

아래는 타겟 데이터베이스를 만들고 몇 가지 검사를 수행하는 bash 스크립트입니다.

# . / db _ clone 。sh old_db new_db

는 파일을 사용합니다./root/.mysqlcnx하여(-u -pPass를 )(-u root -pPass) credential을 사용합니다.

[client]
user = root # or powerfull_user with GRANTS 
password = pass_string
host = localhost

데이터베이스를 복제하기 위한 다음 스크립트 [확신성을 위해 가상 머신에서 실험]

#!/bin/bash

if [ $# -lt 2 ]; then
   echo "syntax:\n.\db_clone.sh source_db_name target_db_name [--drop]\n"
exit 1
fi

    # checking target database $2 exits
tg_db=$(mysql --defaults-extra-file=~/.mysqlcnx -s -N -e "SELECT count(*)>0 FROM 
         information_schema.SCHEMATA where SCHEMA_NAME='${2}'")
if [ $tg_db = '1' ]; then
    # checking target database has tables
    tg_tb=$(mysql --defaults-extra-file=~/.mysqlcnx -s -N -e " SELECT count(*) > 0 
            FROM information_schema.TABLES WHERE TABLE_SCHEMA='${2}'")
  if [ $tg_tb = '1' ]; then
     if [ $# -eq 3 ] && [ "$3" = '--drop' ]; then
        echo "TYPE 'YES' (case sensitive) TO OVERRIDE"
        read opt # request confirmation 
        if [ "$opt" != "YES" ]; then
            echo "OPERATION CANCELED!"
            exit 1
        fi
     else
       printf "DATABASE \"${2}\" EXISTS AND HAS TABLES\nUSE --drop as 3rd arg to override!\n"
       exit 1
     fi
  fi
else 
  mysql --defaults-extra-file=~/.mysqlcnx -e "CREATE DATABASE \`${2}\`" 
fi

echo "CREATING ${2}"
mysqldump --defaults-extra-file=~/.mysqlcnx -d $1 | # dump source
sed "s/\`${1}\`\./\`${2}\`\./g" |  #  solving `source_db`.tb_name       
sed 's/AUTO_INCREMENT=[0-9]\+/''/g' | # solving  AUTO_INCREMENT=1
mysql --defaults-extra-file=~/.mysqlcnx $2  # populating target_db 
echo "DONE"

언급URL : https://stackoverflow.com/questions/14107919/copy-database-structure-without-data-in-mysql-with-empty-tables

반응형