mariadb/mysql 데이터베이스 주종 동기화 구조 구축

5966 단어 데이터베이스
MySQL 데이터베이스는 동기식 복제, 단방향, 비동기식 복제 집단을 지원하며 한 서버에서 주 서비스로 하고 하나 이상의 서버에서 서버로 충당한다.사용자가 주 서버에 데이터를 쓰는 작업, 주 서비스가 작업을 수행하여 데이터를 쓰고 작업 명령을 바이너리 로그 파일에 기록합니다.서버에서 메인 서버에 요청을 보내서 메인 서버의 바이너리 로그 내용을 가져온 내용을 자신의 중계 로그에 기록하고 중계에 따라 리셋합니다.
주종 복사를 사용할 때, 테이블에 대한 모든 쓰기는 주 서버에서 해야 합니다.서버에서의 쓰기 작업은 다른 서버에 동기화할 수 없습니다. 사용자가 서버에서 데이터를 쓰는 것을 피하기 위해서는 전방에서 읽기와 쓰기 분리를 스케줄링해야 합니다.

1. 실험 환경


1) 두 대의centos7.2 시스템의 가상 머신, 네트워크가 서로 통하고 메인 라이브러리가 있는 가상 머신의 방화벽이 닫힌다(방화벽은 라이브러리가 있는 클라우드 호스트에서 메인 라이브러리 데이터베이스에 접근하는 데 영향을 줄 수 있음)
2) 두 대의 가상 기기에 설치된 데이터베이스 버전이 모두 일치하고 본 실험은mariadb-server-5.56-2이다.
주 라이브러리가 있는 가상 기기 IP 주소: 192.168.2.205
라이브러리에 있는 가상 기기 IP 주소: 192.168.2.150

2. 구축 절차


1. 홈 라이브러리가 있는 가상 시스템의 작업


1) mariadb 데이터베이스 설정 수정, 설정 수정 후 서비스 재시작
[[email protected] ~]#vim /etc/my.cnf.d/server.cnf 

[mysqld]

server_id=1                 # ID 
log_bin=log-bin             # 
skip_name_resolve=on        # 。 CentOS 6 mysql =on 
innodb_file_per_table=on    #innodb 

2) 라이브러리 연결에서 홈 라이브러리를 복사하는 사용자 만들기
[[email protected] ~]#mysql
MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave_account'@'192.168.2.205' IDENTIFIED BY '123123';
Query OK, 0 rows affected (0.00 sec)            # 

MariaDB [(none)]> FLUSH PRIVILEGES; 
Query OK, 0 rows affected (0.00 sec)

2. 라이브러리에 있는 가상 머신의 작업


1) mariadb 데이터베이스 설정을 수정하고 다시 시작하면 적용됩니다.
[[email protected] ~]#vim /etc/my.cnf.d/server.cnf 
[mysqld]
server_id=2
relay_log=relay-log         # 。 relay-kog.info 。
read_only=on                # , 。

2) 글로벌 잠금 추가
 :
    mysql> FLUSH TABLES WITH READ LOCK;      

3) 서비스 시작:
주 서버의 주소와 주 서버를 연결하는 사용자 이름과 비밀번호를 설정하고 서버의 바이너리 파일의 위치부터 복사하도록 지정합니다.
CHANGE MASTER TO MASTER_HOST='192.168.2.205',MASTER_USER='slave_account',MASTER_PASSWORD='123123',MASTER_LOG_FILE='log-bin.000004',MASTER_LOG_POS=2726;

참고: 현재 라이브러리가 있는 바이너리 파일과 위치를 가져오려면 라이브러리가 있는 가상 시스템에서 다음 명령을 실행해야 합니다.
MariaDB [(none)]> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| log-bin.000004    |      2726|              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

이 설정은 데이터 디렉터리에 저장된 가마스터입니다.info 파일 내
MariaDB [(none)]> START SLAVE;        # SLAVE 
                        # ,IO_THREAD ,SQL_THREAD , 。
MariaDB [(none)]> SHOW SLAVE STATUS\G;      # 
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.205
                  Master_User: slave_account
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: log-bin.000004
          Read_Master_Log_Pos: 2726
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 727
        Relay_Master_Log_File: log-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 2726
              Relay_Log_Space: 1015
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)

참고: 위의 그림에서 Slave_IO_Running은 복제 루틴, Slave_SQL_TRunning은 리셋 라인입니다.이 두 라인은 반드시 RUNNING 상태에 있어야 한다.

테스트


홈 라이브러리 작업:
MariaDB [mydb]> create database mydb;           # 
MariaDB [mydb]> use mydb;
MariaDB [mydb]> create table test1 (id int,neme char(100));
MariaDB [mydb]> insert into test1 values (1,'Xiao XXXX');
MariaDB [mydb]> select * from test1;
+------+-----------+
| id   | neme      |
+------+-----------+
|    1 | Xiao XXXX |
+------+-----------+
1 row in set (0.00 sec)

관찰 라이브러리:
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mydb               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(none)]> select * from mydb.test1;
+------+----------+
| id   | neme     |
+------+----------+
|    1 | Xiao XXX |
+------+----------+

테스트 증명mariadb 데이터베이스 주종 구조 구축 성공!

보충설명---만난 구덩이 및 해결 방법


1. 라이브러리에서 동기화를 설정할 때 다음과 같은 오류를 보고합니다.
ERROR 1201 (HY000): Could not initialize master info structure .

이 오류가 발생한 이유는 라이브러리에서 이미 주종 복사를 했기 때문에 먼저 라이브러리에서 멈추고 라이브러리에서 동기화 설정을 해야 합니다.
MariaDB [(none)]> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec) 
MariaDB [(none)]> reset slave;  
Query OK, 0 rows affected, 1 warning (0.00 sec) 

2. mariadb 데이터베이스 사용자 삭제
MariaDB [(none)]> SELECT User, Host, Password FROM mysql.user;

MariaDB [(none)]> drop user zhangsan@'%';  

좋은 웹페이지 즐겨찾기