MySQL 에서 사용 하 는 흔 한 문제 해결 과 응용 기법 을 모 았 습 니 다.

머리말
MySQL 의 일상적인 개발 이나 유지 보수 에서 일부 문제 나 고장 은 암호 분실,시계 손상 등 피하 기 어렵다.여기 서 흔히 볼 수 있 는 문 제 를 총 결 하여 앞으로 필요 한 것 에 대비 하 다.
1.MySQL 의 루트 비밀 번 호 를 잊 어 버 리 기
1.데이터베이스 가 있 는 서버 에 로그 인하 여 my sql 프로 세 스 를 수 동 으로 kill 합 니 다.
(1)데이터베이스 가 있 는 서버 에 로그 인하 여 MySQL 프로 세 스 를 수 동 으로 kill 합 니 다.

root@bogon:/data/mysql# kill `cat ./mysql.pid`
그 중에서 mysql.pid 는 MySQL 데이터 디 렉 터 리 에 있 는 pid 파일 을 가리 키 며 MySQL 서비스의 프로 세 스 번 호 를 기록 합 니 다.
(2)--skip-grant-tables 옵션 을 사용 하여 MySQL 서 비 스 를 다시 시작 합 니 다.

zj@bogon:/data/mysql$ sudo /usr/local/mysql/bin/mysqld --skip-grant-tables --user=root &
--skip-grant-tables 옵션 은 MySQL 서 비 스 를 시작 할 때 권한 표 인증 을 건 너 뛰 었 다 는 뜻 이다.시작 하면 MySQL 에 연 결 된 루트 에 암호 가 필요 하지 않 습 니 다.
(3)빈 비밀번호 의 루트 사용자 로 my sql 에 연결 하고 루트 암 호 를 변경 합 니 다.

zj@bogon:/usr/local/mysql/bin$ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.18-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> set password = password('123456');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
MySQL [(none)]> use mysql
Database changed
MySQL [mysql]> update user set authentication_string=password('123456') where user="root" and host="localhost";
Query OK, 1 row affected, 1 warning (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 1

MySQL [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MySQL [mysql]> exit;
Bye

****************************************************************

zj@bogon:/usr/local/mysql/bin$ mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.18-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> 
--skip-grant-tables 옵션 을 사용 하여 시 작 했 기 때문에"set password"명령 으로 암 호 를 변경 하 는 데 실 패 했 습 니 다.user 표 의 authentication 을 직접 업데이트 합 니 다.string(테스트 버 전 5.7.18,일부 버 전 암호 필드 는'password')필드 후 암 호 를 변경 하 는 데 성공 하 였 습 니 다.권한 표를 새로 고침 하여 권한 인증 을 다시 유효 하 게 합 니 다.루트 로 다시 로그 인 할 때 방금 수 정 된 암 호 를 사용 할 수 있 습 니 다.
2.my isam 저장 엔진 의 시계 손상 을 어떻게 처리 합 니까?
가끔 myisam 시계 가 손상 되 는 경우 가 있 습 니 다.손 상 된 표 의 증상 은 일반적으로 조회 가 예상 치 못 하 게 중단 되 고 다음 과 같은 오 류 를 볼 수 있 습 니 다.
  • 'table_name.frm'잠 겨 서 변경 할 수 없습니다
  • 파일 을 찾 을 수 없습니다.'tblname.MYYI' (errcode:nnn)
  • 파일 의외 종료
  • 기록 파일 이 훼손 되 었 습 니 다
  • 시계 프로세서 에서 오류 nnn 을 얻 었 습 니 다.
  • 보통 다음 과 같은 두 가지 해결 방법 이 있다.
    1.myisamchk 도구 사용
    MySQL 자체 myisamchk 도 구 를 사용 하여 복구:
    
    shell> myisamchk -r tablename
    그 중에서-r 매개 변 수 는 recover 라 는 뜻 으로 위의 방법 은 거의 모든 문 제 를 해결 할 수 있 고 그렇지 않 으 면 명령 을 사용 합 니 다.
    
    shell> mysiamchk -o tablename
    그 중에서-o 매개 변 수 는 safe-recover 로 더욱 안전 한 복 구 를 할 수 있다 는 뜻 이다.
    2.sql 명령 사용
    MySQL 의 check table 과 repair table 명령 을 사용 하여 복원 합 니 다.check table 은 표 가 손상 되 었 는 지 확인 합 니 다.repair table 은 고장 난 시 계 를 복구 하 는 데 사용 된다.
    3.데이터 디 렉 터 리 디스크 공간 부족 문제
    시스템 이 출시 된 후에 데이터 양 이 계속 증가 하면 서 데이터 디 렉 터 리 의 사용 가능 한 공간 이 점점 작 아 지면 서 응용 에 안전 위험 을 초래 한 것 을 발견 할 수 있다.
    1.myisam 메모리 엔진 의 시계
    my isam 저장 엔진 의 표 는 표를 만 들 때 다음 과 같은 옵션 으로 데이터 디 렉 터 리 와 색인 디 렉 터 리 를 각각 다른 디스크 공간 에 저장 할 수 있 으 며,기본 값 은 데이터 디 렉 터 리 에 동시에 놓 습 니 다.
    
    data directory = 'absolute path to directory'
    index directory = 'absolute path to directory'
    표 가 만 들 어 졌 다 면 먼저 정지 하거나 표를 잠 그 고 표 의 변경 을 방지 한 다음 에 표 의 데이터 파일 과 색인 파일 뮤 직 비디오 를 디스크 의 충분 한 파 티 션 에 만 든 다음 에 원래 파일 에 심 볼 릭 링크 를 만 들 면 됩 니 다.
    2.innodb 메모리 엔진 의 시계
    데이터 파일 과 색인 파일 이 함께 저장 되 어 있 기 때문에 분리 할 수 없습니다.디스크 공간 이 부족 할 때 새 데이터 파일 을 추가 할 수 있 습 니 다.이 파일 은 충분 한 공간의 디스크 에 놓 습 니 다.
    구체 적 인 실현 방법 은 인자 innodbdata_file_path 에 이 파일 을 추가 합 니 다.경 로 는 새 디스크 의 절대 경로 로 쓰 여 있 습 니 다.
    예 를 들 어/home 에서 공간 이 부족 하면/home 1 에서 데 이 터 를 자동 으로 확장 할 수 있 는 파일 을 새로 추가 하려 면 매개 변 수 는 이렇게 쓸 수 있 습 니 다.
    
    innodb_data_file_path = /home/ibdata1:2000M;/home1/ibdata2:2000M:autoextend
    매개 변 수 를 수정 한 후 데이터 베 이 스 를 다시 시작 해 야 효력 이 발생 합 니 다.
    4.DNS 역방향 분석 문제(5.0 이후 버 전 은 도 메 인 이름 역방향 분석 을 기본적으로 건 너 뜁 니 다)
    클 라 이언 트 에서 show processlist 명령 을 실행 하면 다음 과 같은 프로 세 스 가 많이 나타 납 니 다.
    
    unauthenticated user | 192.168.10.10:55644 | null | connect | null | login | null
    이러한 프로 세 스 는 점점 더 누적 되 고 사라 지지 않 으 며 응용 이 정상적으로 대응 되 지 않 아 시스템 이 마비 된다.
    MySQL 은 기본적으로 원 격 으로 연 결 된 IP 주소 에 대해 도 메 인 이름 을 역방향 으로 해석 합 니 다.시스템 의 hosts 파일 에 해당 하 는 도 메 인 이름 이 없 으 면 MySQL 은 이 연결 을 무효 사용자 로 간주 하기 때문에 다음 프로 세 스에 서 unauthenticated user 가 나타 나 고 진행 이 막 힙 니 다.
    해결 방법 은 간단 합 니 다.시작 할 때--skip-name-resolve 옵션 을 추가 하면 MySQL 은 도 메 인 이름 분석 과정 을 건 너 뛰 어 상기 문 제 를 피 할 수 있 습 니 다.
    5.my sql.sock 을 잃 어 버 린 후 데이터 베 이 스 를 어떻게 연결 합 니까?
    MySQL 서버 본 컴퓨터 에 데이터 베 이 스 를 연결 할 때 mysql.sock 이 존재 하지 않 아 연결 할 수 없 는 문제 가 자주 발생 합 니 다.호스트 이름 으로 localhost 를 지정 하면 tcp/ip 대신 mysqladmin 에서 기본적으로 유 닉 스 소켓 파일 로 연결 하기 때 문 입 니 다.이 소켓 파일(일반적으로 my sql.sock)은 여러 가지 이유 로 삭 제 됩 니 다.--protocol=TCP|SOCKET|PIPE|MEMORY 옵션 을 통 해 사용 자 는 연결 프로 토 콜 을 명시 적 으로 지정 할 수 있 습 니 다.유 닉 스 소켓 을 사용 하지 못 한 후 tcp 프로 토 콜 로 연결 하 는 데 성공 한 예 를 보 여 줍 니 다.
    1.유 닉 스 소켓 연결:
    
    zj@bogon:~$ mysql
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    2.tcp 연결
    
    zj@bogon:~$ mysql --protocol=TCP
    6.MyISAM 표 가 너무 커서 문제 에 접근 할 수 없습니다.
    우선 myisamchk 명령 을 통 해 MyISAM 표 의 상황 을 볼 수 있 습 니 다.다음 그림 에서 admin 표를 보 겠 습 니 다.
  • datefile length 는 현재 파일 크기
  • 을 대표 합 니 다.
  • keyfile length 대표 색인 파일 크기
  • max datefile length 최대 파일 크기
  • max keyfile length 최대 색인 크기
  • 다음 명령 을 통 해 데이터 파일 크기 를 확장 할 수 있 습 니 다.
    
    alter table table_name MAX_ROWS=88888888 AVG_ROW_LE=66666
    7.데이터 디 렉 터 리 디스크 공간 부족 문제
    MyISAM 메모리 엔진
    데이터 디 렉 터 리 와 색인 디 렉 터 리 를 다른 디스크 공간 에 저장 할 수 있 습 니 다.
    InnoDB 메모리 엔진
    InnoDB 저장 엔진 의 표 는 데이터 파일 과 색인 파일 이 함께 저장 되 어 있 기 때 문 입 니 다.그래서 헤 어 질 수가 없어 요.디스크 공간 이 부족 할 때 새로운 데이터 파일 을 추가 할 수 있 습 니 다.이 파일 은 충분 한 공간 이 있 는 디스크 에 놓 여 있 습 니 다.구체 적 인 실현 은 InnoDB 를 통 해data_file_path 에 이 파일 을 추가 합 니 다.
    
    innodb_data_file_path=/home/mysql/data:10000M;/user/mysql/data:10000M:autoextend 
    매개 변수 가 수정 되면 서버 를 다시 시작 해 야 효력 이 발생 합 니 다.
    8.같은 호스트 에 여러 개의 Mysql 설치
    모든 Mysql 설치 디 렉 터 리 가 같 지 않 은 것 외 에 port 와 socket 이 같 지 않 아야 합 니 다.
    my sql.sock 은 클 라 이언 트 연결 과 my sql 간 통신 용 입 니 다.socket 파일 은 이 컴퓨터 에서 만 사용 할 수 있 습 니 다.원 격 연결 은 tcp/ip 를 통 해 이 루어 집 니 다.
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기