evited error & db이중화

김세벽·2024년 7월 15일

final

목록 보기
1/4

vagrantfile

root 디렉토리 용량 부족

파티션 구성 확인 => 총 50GB중 10GB만 사용중

$ sudo dnf -y install cloud-utils-growpart => 미할당 영역을 물리 파티션에 할당하기 위해, growpart 기능이 필요

growpart 명령어를 통해 물리 파티션에 용량을 추가합니다. Root가 포함되어 있는 sda5 물리 파티션에 추가합니다.

파일 시스템 유형 확인 => /dev/sda5에 마운트된 XFS 파일 시스템을 확장합니다. => 파티션 크기를 직접 조정하는 것이 아니라, 이미 할당된 공간을 모두 사용할 수 있도록 파일 시스템을 확장합니다.

db

$ sudo dnf -y install mysql-server

$ sudo vim /etc/my.cnf.d/mysql-server.cnf
//
[mysqld]
# datadir=/var/lib/mysql
# socket=/var/lib/mysql/mysql.sock
# log-error=/var/log/mysql/mysqld.log
# pid-file=/run/mysqld/mysqld.pid

log-bin = mysql-bin
server-id = 1
binlog_format = row
expire_logs_days = 7
//

$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service

$ sudo systemctl start firewalld
$ sudo systemctl start firewalld

$ sudo firewall-cmd --permanent --add-service=mysql
$ sudo firewall-cmd --reload

$ mysql -u root

mysql> CREATE USER 'slave_db'@'%' IDENTIFIED BY '1234';
Query OK, 0 rows affected (0.03 sec)

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_db'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS FOR 'slave_db'@'%';
+--------------------------------------------------+
| Grants for slave_db@%                            |
+--------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO `slave_db`@`%` |
+--------------------------------------------------+
1 row in set (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      866 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> exit

primary-db

$ sudo dnf -y install mysql-server

$ sudo vim /etc/my.cnf.d/mysql-server.cnf
//
[mysqld]
# datadir=/var/lib/mysql
# socket=/var/lib/mysql/mysql.sock
# log-error=/var/log/mysql/mysqld.log
# pid-file=/run/mysqld/mysqld.pid

log-bin = mysql-bin
server-id = 2
binlog_format = row
expire_logs_days = 7
//

$ sudo systemctl start mysqld.service
$ sudo systemctl enable mysqld.service

$ sudo systemctl start firewalld
$ sudo systemctl start firewalld

$ sudo firewall-cmd --permanent --add-service=mysql
$ sudo firewall-cmd --reload

$ mysql -u root

mysql> CHANGE REPLICATION SOURCE TO
    ->     SOURCE_HOST = '192.168.110.110',
    ->     SOURCE_USER = 'slave_db',
    ->     SOURCE_PASSWORD = '1234',
    ->     SOURCE_PORT = 3306,
    ->     SOURCE_LOG_FILE = 'mysql-bin.000002',
    ->     SOURCE_LOG_POS = 2520;
Query OK, 0 rows affected, 2 warnings (0.08 sec)

mysql> start replica;
Query OK, 0 rows affected (0.04 sec)

readreplica-db

primary-db-ansible

inventory

$ vim inventory
//
[primary-db]
192.168.110.110
//

ansible.cfg

$ vim ansible.cfg
//
[defaults]
inventory=inventory
remote_user=vagrant
//

mysql-server.cnf.j2

$ vim mysql-server.cnf.j2
//
#
# This group are read by MySQL server.
# Use it for options that only the server (but not clients) should see
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/en/server-configuration-defaults.html

# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld]
# datadir=/var/lib/mysql
# socket=/var/lib/mysql/mysql.sock
# log-error=/var/log/mysql/mysqld.log
# pid-file=/run/mysqld/mysqld.pid

log-bin = mysql-bin
server-id = 1
binlog_format = row
expire_logs_days = 7
//

playbook

$ vim playbook.yml
//
---
- name: Configure primary db server
  hosts: primary-db
  become: true
  tasks:
    - name: Install mysql-server
      dnf:
        name: mysql-server
        state: present

    - name: MySQL binlog configuration
      template:
        src: mysql-server.cnf.j2
        dest: /etc/my.cnf.d/mysql-server.cnf

    - name: Start and enable mysql service
      service:
        name: mysql
        state: started
        enabled: true

    - name: Start and enable firewalld service
      service:
        name: firewalld
        state: started
        enabled: true

    - name: Open mysql service
      firewalld:
        servie: mysql
        permanent: true
        state: enabled
        immediate: yes

    - name: Update mysql root password for root account
      mysql_user:
        login_unix_socket: /var/lib/mysql/mysql.sock
        name: root
        host: localhost
        password: "4321"
        priv: "*.*:ALL,GRANT"
        check_implicit_admin: true
//

playbook 확인

서비스이름 mysql -> mysqld 변경

python3-PyMySQL패키지를 설치해줘야함

  • mysqld 서비스
  • firwalld 서비스
  • mysql(3306)포트 개방

  • slave_db 사용자 생성 확인
  • slave_db 사용자는 슬레이브 서버가 마스터 서버로부터 데이터를 복제할 수 있도록 허용

readreplica-db01-ansible

inventory

$ vim inventory
//
[readreplica-db01]
192.168.110.111
//

ansible.cfg

$ vim ansible.cfg
//
[defaults]
inventory=inventory
remote_user=vagrant
//

mysql-server.cnf.j2

$ vim mysql-server.cnf.j2
//
#
# This group are read by MySQL server.
# Use it for options that only the server (but not clients) should see
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/en/server-configuration-defaults.html

# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld]
# datadir=/var/lib/mysql
# socket=/var/lib/mysql/mysql.sock
# log-error=/var/log/mysql/mysqld.log
# pid-file=/run/mysqld/mysqld.pid

log-bin = mysql-bin
server-id = 2
binlog_format = row
expire_logs_days = 7
//

playbook

---
- name: Configure readreplica-db01 server
  hosts: readreplica_db01
  become: true
  tasks:
    - name: Install mysql-server
      dnf:
        name: "{{ item }}"
        state: present
      loop:
        - mysql-server
        - python3-PyMySQL

    - name: MySQL binlog configuration
      template:
        src: mysql-server.cnf.j2
        dest: /etc/my.cnf.d/mysql-server.cnf

    - name: Start and enable mysql service
      service:
        name: mysqld
        state: started
        enabled: true

    - name: Start and enable firewalld service
      service:
        name: firewalld
        state: started
        enabled: true

    - name: Open mysql service
      firewalld:
        service: mysql
        permanent: true
        state: enabled
        immediate: yes

    - name: Update mysql root password for root account
      mysql_user:
        login_unix_socket: /var/lib/mysql/mysql.sock
        name: root
        host: localhost
        password: "4321"
        priv: "*.*:ALL,GRANT"
        check_implicit_admin: true

    - name: Change replication source on slave servers
      mysql_replication:
        mode: changeprimary
        login_user: root
        login_password: 4321
        primary_host: "192.168.110.110"
        primary_user: "slave_db"
        primary_password: "1234"
        primary_port: 3306
        primary_log_file: "mysql-bin.000002"
        primary_log_pos: 1743

    - name: Start slave replication
      mysql_replication:
        login_user: root
        login_password: 4321
        mode: startreplica

Ansible이 MySQL 모듈을 사용하여 MySQL에 접속할 때 필요한 인증 정보(login_user 및 login_password)가 제공되지 않았을 때 발생합니다.
=> login_user: root / login_password: 4321 해당 task에 추가

playbook 확인

  • mysqld 서비스
  • firwalld 서비스
  • mysql(3306)포트 개방

DB 이중화 성공

  • Reading table information for completion of table and column names: 이 부분은 MySQL 콘솔이 사용자가 테이블 이름이나 열 이름을 입력할 때 자동 완성을 지원하기 위해 데이터베이스의 정보를 읽고 있다는 것을 의미합니다.
  • You can turn off this feature to get a quicker startup with -A: 이 부분은 자동 완성 기능을 비활성화하여 MySQL 클라이언트가 더 빠르게 시작될 수 있다는 것을 알려줍니다. -A 옵션을 사용하여 이 기능을 끌 수 있습니다.

이 메시지는 MySQL 콘솔 사용 시 도움이 되는 정보를 제공하며, 직접 서버에서 실행 중인 문제나 오류 메시지와는 관련이 없습니다. MySQL 콘솔에서 이러한 정보는 사용자 경험을 향상시키는 데 도움을 줄 수 있습니다.

vagrant 강제 종료 오류

Bringing machine 'primary-db' up with 'virtualbox' provider...
Vagrant locks each machine for access by only one process at a time.
Please wait until the other Vagrant process finishes modifying this
machine, then try again.

If you believe this message is in error, please check the process
listing for any "ruby" or "vagrant" processes and kill them. Then
try again.

해결방벙 => https://velog.io/@ww3ysq/4k3u2kol

replication 깨질때 skip 방법

https://itexit.tistory.com/29

profile
normal

0개의 댓글