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 시계 가 손상 되 는 경우 가 있 습 니 다.손 상 된 표 의 증상 은 일반적으로 조회 가 예상 치 못 하 게 중단 되 고 다음 과 같은 오 류 를 볼 수 있 습 니 다.
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 표를 보 겠 습 니 다.
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 를 통 해 이 루어 집 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.