MySQL에서는 어디에서나 주석을 어떻게 제거 할 수 있습니까?
내 데이터베이스의 간단한 구조만을 만들려고합니다. 사용 mysqldump
하면 다음과 같은 결과가 나타납니다.
/*!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 */;
DROP TABLE IF EXISTS `foo`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
내가 무엇을 시도하든 그 댓글을 제거 할 수없는 것입니다.
나는 현재 사용하고 있습니다 : mysqldump -p -d --add-drop-table --skip-tz-utc --skip-set-charset -h 127.0.0.1 -u foo bar --result-file=dumpfile.sql
편집 : 그러나 다음과 같은 의견을 유지하고 싶습니다.-- MySQL dump 10.13 Distrib 5.1.41, for Win32 (ia32)
와! 그렇게 보이지만 실제로는 댓글이 아닙니다. 조건부 실행 토큰입니다.
이 줄을 형광 :
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
mySQL 버전이 4.00.14 이상 이면 MySQL 서버가 명령문을 실행합니다.
이 매직 주석 구문은 매뉴얼 의 주석 구문 섹션에 설명되어 있습니다.
이 물건을 없애고 않을 것입니다.
나는 고대의 질문이라는 것을 알리고 여기에 대답이 있습니다. 또한 조건부 주석을 제거하기 위해 mysqldump에서 플래그를 표시 할 수 있습니다. 즉, 주석이 최소 mysql 버전을 설정하는 더 나은 옵션을 사용할 수 없습니다. 모두 핵을 사용하는 경우 grep 또는 sed를 사용하여 수행 할 수 있습니다 (sed는 빈 줄을 남기고 grep은 지정됩니다).
mysqldump ... | grep -v '^\/\*![0-9]\{5\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-9]\{5\}.*\/;$//g'
mysql 버전에 따라 조건부로 주석을 제거하려는 내 자신의 바람에 답 다음 중 하나를 사용하십시오 (<mysql5에 대한 주석 제거).
mysqldump ... | grep -v '^\/\*![0-4][0-9]\{4\}.*\/;$'
mysqldump ... | sed -e 's/^\/\*![0-4][0-9]\{4\}.*\/;$//g'
시도 --skip-comments
하시겠습니까?
감사합니다
편집하다 :
.. 이거 해봐
--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset
원하는 결과를 얻을 때까지 일부 제거하기 위해 놀아 옵션을 제거합니다. 으로 이것은 기본적 --compact
없는 것과 같습니다.--skip-comments
--skip-comments
버전 및 항목과 관련된 주석을 제거합니다.
바로 가기 옵션을 추천 보 --compact
?
기술적으로 제거하려는 줄은 주석이 아닙니다. 처음에 일부 변수를 임시로 수정 한 다음 마지막에 이전 값으로 적절합니다.
--no-data를 사용하고 있기 때문에 귀하의 경우에는 그다지 유용하지 않지만 (하지만 무해합니다) --no-data를 사용하고 있기 때문입니다. 할 가치가 검증되었습니다.
여기서 주석이 실행의 해당 부분 실행은 mysql 버전에 따라 실행됩니다.
다음과 같이 "댓글 부분"을 사용할 수 있습니다.
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */
...에
SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0
펼쳐보기 읽기에 더 "편안하게"만 페이지.
"comment"에 지정된 것보다 최신 버전에서 "comfortable"이 발생합니다.
아마도 40014 또는 40111 등을 포함하는 줄을 제거하기 위해 정규식을 실행했을 것입니다.
Windows를 사용하고 있으므로 아무도 더 나은 솔루션을 찾을 수 없습니다. Python 펼쳐보기를 대신 사용할 수 있습니다.
import re, sys
sql = sys.stdin.read()
regex = re.compile(r'/\*![^\n]* \*/;\n', re.M)
print regex.sub('', sql)
명령 줄에서의 사용법 :
python program.py < your.sql > output.sql
다음과 같은 모든 줄을 제거합니다.
/*!....... */;
git / github에 structure.sql 파일을 포함하려고 시도하는 질문에 우연히 발견 한 경우 db : structure : dump를 rake 다음 코드로 자동 증가를 제거 할 수 있습니다.
# Remove beginning auto increments to prevent merge conflicts
filename = 'db/structure.sql'
File.atomic_write(filename) do |output|
File.open(filename, 'rb').each do |input|
output.write(input.gsub(/\s+AUTO_INCREMENT=\d+\s+/, ' '))
end
end
조건부 주석 제거를 포함하여 구성을 정규화하기 위해이 펼쳐를 만들었습니다 : https://github.com/luissquall/dbdump .
다음을 수행하면됩니다.
npm install -g @luissquall/dbdump
# Redirect output to a file
dbdump -u user -p -d database > struct.sql
조건부 실행 주석을 유지하는 것이 정말 중요합니다. 그러나 덤프를로드 할 MySQL의이 덤프를 버전 생성하는 버전보다 크거나 같다는 것을 확실히 알고 난 웬지 - 다음 과 같이 "주석"부분을 제거 할 수 있습니다.
sed -r s'#/\*![0-9]{5} ?([^*]*)\*/#\1#'g
다음과 같은 행을 변환합니다.
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
...에
SET SQL_MODE=@OLD_SQL_MODE ;
이 줄 은 모든 MySQL> = 4.1.1에서 실행 되어야 하기 때문입니다.
트리거를 덤프 할 때와 같이 여러 줄 조건부 실행 주석은 제거되지 않습니다.
미래를 예측할 수 없기 때문에 주석이 달린 덤프를 저장하고 시각화하고 싶을 때만 제거하는 것이 좋습니다.
mysqldump ... > dump.sql
cat dump.sql | sed -E s'#/\*![0-9]{5} ?([^*]*)\*/#\1#'g > dump.no-comments.sql
@Ollie와 몇몇 다른 사람들이 지적했듯이 이들은 주석 스타일로 작성된 조건부 실행 토큰이지만 목적을 달성했습니다. 그것들이 없으면 외래 키 제약 조건이 강하게 적용되는 테이블을 다시 만드는 문제가 발생할 수 있습니다. 예를 들어, 테이블 A에는 테이블 B에 대한 FK가 있으므로 테이블 B가 그렇게 할 때까지 테이블 A를 만들 수 없습니다. 키 검사를 비활성화하지 않으면 테이블 주문에 벌금이 부과되는 방식에 따라 키 검사를 다시 만들 수 없습니다.
사용하다 --dump-date=FALSE
OP가 요구하는 것을 정확히 수행합니다. (정확히 아니에요)
출처 : mysqldump 옵션 요약
편집 : 무슨 그냥 내가 깨달은 분 후, 이것이 내가 아니라 영업 이익을 찾고, 그러나 여기에서 떠나 ... 희망 누군가를 사용할 수 있었다 : 그것 때문에 항상 변화를 소스 제어 유적이 날짜 라인을 ...
당신이 찾고있는 것이 무엇인지 모르겠습니다. 구문 하이 라이터를 사용할 수 있도록 mysql 주석을 모두 제거하고 싶었습니다. 간단한 정규식을 사용하고 모두 다음 "/ \ *! [ 0-9] {5} | \ * / "그리고 짜잔! 코드의 멋진 색상;)
참고 URL : https://stackoverflow.com/questions/1916392/how-can-i-get-rid-of-these-comments-in-a-mysql-dump
'ProgramingTip' 카테고리의 다른 글
rails- 콘솔 출력을 파일로 리디렉션 (0) | 2020.10.15 |
---|---|
파일을 업로드하기 전에 파일 확인 확인 (0) | 2020.10.15 |
Postgres 오류 "파라미터"TimeZone "에 대한 잘못된 값 :"UTC "" (0) | 2020.10.15 |
Objective-C의 속성에 블록을 저장하는 방법은 무엇입니까? (0) | 2020.10.15 |
File.Move 작동하지 않음-파일이 이미 있음 (0) | 2020.10.15 |