MySQL의 마스터-슬레이브 복제, 읽기-쓰기 분리, 백업 및 복구에 대한 자세한 설명

巴扎黑
풀어 주다: 2019-12-07 16:15:58
원래의
3742명이 탐색했습니다.

1. MySQL 마스터-슬레이브 복제

1. 소개

마스터-슬레이브 복제를 사용하는 이유는 무엇인가요?

마스터-슬레이브 복제의 목적:

은 데이터 무결성을 보장하기 위해 데이터베이스를 실시간 백업할 수 있습니다.

읽기와 쓰기를 분리할 수 있으며, 마스터 서버는 쓰기만 합니다. , 슬레이브 서버는 읽기 전용이므로 전반적인 성능을 향상시킬 수 있습니다.

구성도:

MySQL의 마스터-슬레이브 복제, 읽기-쓰기 분리, 백업 및 복구에 대한 자세한 설명

위 그림에서 볼 수 있듯이 로그 파일을 동기적으로 읽고 쓰면 동기화가 완료됩니다.

2. 구성 파일을 변경합니다

이틀 동안 머신을 작동하고 서버 ID가 다름, 일반적으로 기본 ID는 보조 ID보다 작아야 합니다. 꼭 주의하세요.

# 3306和3307分别代表2台机器
# 打开log-bin,并使server-id不一样
#vim /data/3306/my.cnf
log-bin = /data/3306/mysql-bin
server-id = 1
#vim /data/3307/my.cnf
log-bin = /data/3307/mysql-bin
server-id = 3
#检查
1、
[root@bogon ~]# egrep "log-bin|server-id" /data/3306/my.cnf
log-bin = /data/3306/mysql-bin
server-id = 1
[root@bogon ~]# egrep "log-bin|server-id" /data/3307/my.cnf 
log-bin = /data/3307/mysql-bin
server-id = 3
2、
[root@localhost ~]# mysql -uroot -p -S /data/3306/mysql.sock -e "show variables like 'log_bin';"
Enter password:
+--------+--------+
| Variable_name | Value |
+--------+--------+
| log_bin    | ON |  # ON 为开始开启成功
+--------+--------+
로그인 후 복사

3. 슬레이브 복제를 위한 계정 담당자 생성

일반적으로 마스터-슬레이브 복제를 위한 전용 계정을 생성하고, 인증을 잊지 마세요.

rree

4. 마스터 데이터베이스를 백업하고 슬레이브 데이터베이스에 복원

마스터 데이터베이스에 있는 기존 데이터를 백업하고 복원 이를 슬레이브 데이터베이스에 저장하면 현재 두 호스트의 데이터가 일치합니다.

미리 데이터가 있다면 이거 잊지 마세요.

1) 읽기 전용 권한만 갖도록 기본 데이터베이스를 잠급니다.

# 主库授权,允许从库来连接我取日志
[root@localhost ~]# mysql -uroot -p -S /data/3306/mysql.sock
Enter password:
# 允许从库192.168.200网段连接,账号rep,密码nick。
mysql> grant replication slave on *.* to 'rep'@'192.168.200.%' identified by 'nick';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 检查创建的rep账号:
mysql> select user,host from mysql.user;
+-----+-------------+
| user | host       |
+-----+--------------+
| root | 127.0.0.1     |
| rep | 192.168.200.%   |
| root | localhost      |
| root | localhost.localdomain |
+-----+------------------+
7  rows in set (0.00 sec)
로그인 후 복사

2) 이 시점에서 백업하는 것을 잊지 마세요.

mysql> flush table with read lock;
Query OK, 0 rows affected (0.00 sec)
#5.1、5.5锁表命令略有不同。
# 5.1锁表:flush tables with read lock;
# 5.5锁表:flush table with read lock;
로그인 후 복사

3) 창을 복제하고 데이터를 백업합니다.

mysql> show master status;
+-------+------+--------+---------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------+------+--------+---------+
| mysql-bin.000013 |  410 |       |        |
+-------+------+--------+---------+
1 row in set (0.00 sec)
로그인 후 복사

4) 마스터 상태를 확인하여 값이 정상인지 확인하세요.

[root@bogon ~]# mysqldump -uroot -p -S /data/3306/mysql.sock -A -B --events --master-data=2|gzip >/opt/rep.sql.gz
Enter password:
参数:  -A:备份所有的
#看rep.sql.gz参数
vim /opt/rep.sql.gz
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000013', MASTER_LOG_POS=410;
로그인 후 복사

5) 라이브러리 잠금 해제

mysql> show master status;
+------+------+---------+-------+
| File      | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------+-----+---------+--------+
| mysql-bin.000013 |  410 |      |        |
+--------+----+---------+--------+
1 row in set (0.00 sec)
로그인 후 복사

6) 슬레이브 라이브러리로 되돌리기

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
로그인 후 복사

5. 슬레이브 라이브러리 구성 및 적용

슬레이브 라이브러리와 메인 라이브러리의 연결 매개변수를 변경하면 구성이 적용됩니다. 검사가 성공했습니다!

1) 슬레이브 라이브러리에 입장합니다.

[root@bogon ~]# gunzip < /opt/rep.sql.gz | mysql -uroot -p -S /data/3307/mysql.sock
Enter password:
로그인 후 복사

2) 마스터 서버와 연결하고 통신하기 위해 슬레이브 서버가 사용하는 매개 변수를 변경합니다.

[root@bogon ~]# mysql -uroot -p -S /data/3307/mysql.sock
Enter password:
로그인 후 복사

3) 변경된 매개변수를 확인하세요.

아아앙

4) 효과적입니다!

mysql> CHANGE MASTER TO
   MASTER_HOST=&#39;192.168.200.98&#39;,
   MASTER_PORT=3306,
   MASTER_USER=&#39;rep&#39;,
   MASTER_PASSWORD=&#39;nick&#39;,
   MASTER_LOG_FILE=&#39;mysql-bin.000013&#39;,
   MASTER_LOG_POS=410;
Query OK, 0 rows affected (0.01 sec)
로그인 후 복사

5) 다음 매개변수를 확인하고 일치하면 정상입니다!

[root@localhost ~]# cd /data/3307/data/
[root@localhost data]# cat master.info
18
mysql-bin.000013
410
192.168.200.98
REP
nick
3306
60
0
0
1800.000
0
로그인 후 복사

6) Relay-bin.logo를 확인하세요.

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
로그인 후 복사

7) Relay-log.info를 확인하세요.

mysql> show slave status\G
Relay_Master_Log_File: mysql-bin.000013
       Slave_IO_Running: Yes    #取logo。
      Slave_SQL_Running: Yes    #读relay-bin、logo,写数据。
Seconds_Behind_Master: 0    #落后主库的秒数。
로그인 후 복사

8) master.info를 확인하세요.

rree

6. 읽기-쓰기 분리

읽기-쓰기 분리는 프로덕션 환경에서 흔히 볼 수 있는 기술이자 꼭 필요한 기술입니다.

MySQL 마스터-슬레이브 복제 인증 테이블 동기화, 읽기 및 쓰기 분리를 무시합니다.

[root@localhost 3307]# cd /data/3307
[root@localhost 3307]# ll
总用量 48
drwxr-xr-x. 9 mysql mysql 4096 10月 29 18:52 data
-rw-r--r--. 1 mysql mysql 1900 10月 29 11:45 my.cnf
-rwx------. 1 root root  1307 10月 20 17:06 mysql
-rw-rw----. 1 mysql mysql   6 10月 29 11:00 mysqld.pid
-rw-r-----. 1 mysql mysql 15090 10月 29 18:49 mysql_nick3307.err
srwxrwxrwx. 1 mysql mysql   0 10月 29 11:00 mysql.sock
-rw-rw----. 1 mysql mysql  150 10月 29 18:49 relay-bin.000001
-rw-rw----. 1 mysql mysql  340 10月 29 18:52 relay-bin.000002
-rw-rw----. 1 mysql mysql  56 10月 29 18:49 relay-bin.index
-rw-rw----. 1 mysql mysql  53 10月 29 18:52 relay-log.info
로그인 후 복사

1) 읽기 전용 매개변수를 통해 슬레이브 라이브러리에 데이터가 기록되는 것을 방지하는 방법입니다.

[root@localhost 3307]# cat relay-log.info
/data/3307/relay-bin.000002
340
mysql-bin.000013
497
로그인 후 복사

2) 마스터-슬레이브 동기화 실패

[root@localhost 3307]# cat data/master.info
18
mysql-bin.000013
497
192.168.200.98
rep
nick
3306
60
0
0
1800.000
0
로그인 후 복사

3) 슬레이브 라이브러리에서 bin-log 열기

rree

7. Master is down

Master가 Down되면 어떻게 슬레이브를 빨리 교체할 수 있는지 시뮬레이션해 볼까요? 손실을 최소화하시겠습니까? 물론 이중 머신 핫 백업도 좋은 선택입니다. 이에 대해서는 다음 섹션에서 설명하겠습니다.

하나의 마스터와 여러 개의 슬레이브가 있는 환경에서 마스터가 다운되면 하나의 슬레이브를 마스터로 선택하고 다른 슬레이브와 계속 동기화합니다.

[root@bogon 3306]# vim my.cnf
#添加以下四行
replicate-ignore-db = mysql
binlog-ignore-db = mysql
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
server-id = 1
로그인 후 복사

8. 이중 기본

기본 기본 사용을 위한 전제 조건: 테이블의 기본 키가 증가됩니다.

이중 마스터의 경우 ID는 프로그램을 통해 라이브러리 M1: 1, 3, 5 및 M2: 2, 4, 6에 기록됩니다.

아아아아

2. MySQL 백업 및 복구

1.

단일 데이터베이스의 가장 기본적인 백업입니다.


아아아아

2. 여러 데이터베이스 백업

여러 데이터베이스를 백업하는 것은 어떻습니까?


rree

3. 단일 테이블과 다중 테이블 백업

단일 테이블과 다중 테이블을 백업한다면 어떨까요?


#修改配置文件。
vim /data/3307/my.cnf
[mysqld]
read-only
#对用户授权事不能指定有super或all privileges权限。不然没效果。
#创建账户suoning,并刷新权限。
mysql> grant select,insert,update,delete on *.* to &#39;suoning&#39;@&#39;localhost&#39; identified by &#39;123&#39;;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#用创建账户登录,并创建库
[root@bogon 3307]# mysql -usuoning -p123 -S /data/3307/mysql.sock
mysql> create user kangkangkang@&#39;192.%&#39; identified by &#39;old123&#39;;
ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement
로그인 후 복사

4. mysqldump의 매개변수

mysqldump의 주요 매개변수


A. Last_SQL_Errno: 1007
stop slave;
set global sql_slave_skip_counter = 1;
start slave;
B.忽略
skip-name-resolve    #忽略名字解析
slave-skip-errors = 1032,1062,1007  #忽略故障编号
server-id = 3
로그인 후 복사

5를 추가했습니다. 볼륨 복구

가장 중요한 것은 프로덕션 환경이 일반적으로 증분 백업 및 복구라는 것입니다. 매번 다시 추가해야 하므로 시간과 노력을 절약하세요.


vim my.cnf
log-bin = /data/3307/mysql-bin
log-slave-updates      #表示从库记录bin-log
expire_logs_days = 7    #保留7天bin-log。
로그인 후 복사

2. 즉시 binlog 새로고침 및 백업

A.查看每个从库的master.info,看谁的更靠前,最新,更大,丢的数据最少。
[root@localhost 3307]# cat /data/3307/data/master.info
mysql-bin.000015
326
B.确保所有relay log全部更新完毕。
在每个从库上执行stop slave io_thread;show processlist;
知道看到Has read all relay log;表示从库更新都执行完毕。
C.登陆mysql -uroot -p -S /data/3307/mysql.sock
stop slave;
reset master;
quit
D.进入到数据库目录,删除master.info relay-log.info
cd /data/3307/data/
rm -f master.info relay-log.info
E. 3307提升为主库
vim /data/3307/my.cnf
开启log-bin = /data/3307/mysql-bin
如存在log-slave-updates,read-only等一定要注释。
/data/3307/mysql restart
F.其它从库操作
stop slave;
change master to master_host =&#39;192.168.200.98&#39;;
start slave;
show slave status\G
로그인 후 복사

복원

[root@localhost 3307]# vim my.cnf
[mysqld]
auto_increment_increment    = 2
auto_increment_offset      = 2
[root@localhost 3307]# ./mysql restart
[root@localhost 3306]# vim my.cnf
[mysqld]
auto_increment_increment    = 2
auto_increment_offset      = 1
log-bin = /data/3306/mysql-bin
log-slave-updates
[root@localhost 3306]# ./mysql restart
[root@localhost 3306]# mysqldump -uroot -pnick -S /data/3307/mysql.sock -A -B --master-data=1 -x --events > /opt/3307bak.sql
[root@localhost 3306]# mysql -uroot -pnick -S /data/3306/mysql.sock < /opt/3307bak.sql
mysql> CHANGE MASTER TO
   MASTER_HOST=&#39;192.168.200.98&#39;,
   MASTER_PORT=3307,
   MASTER_USER=&#39;rep&#39;,
   MASTER_PASSWORD=&#39;nick&#39;;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status \G
로그인 후 복사
위 내용은 이 글의 전체 내용입니다. 이 글의 내용이 모든 분들의 공부나 업무에 조금이라도 도움이 되었으면 좋겠습니다.

위 내용은 MySQL의 마스터-슬레이브 복제, 읽기-쓰기 분리, 백업 및 복구에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿