ວິທີການຕັ້ງຄ່າຕົວແບບ MySQL (Master-Slave) ໃນ RHEL, CentOS, Fedora


ການແນະ ນຳ ຕໍ່ໄປນີ້ມີຈຸດປະສົງເພື່ອໃຫ້ທ່ານມີ ຄຳ ແນະ ນຳ ຂັ້ນຕອນໂດຍຂັ້ນຕອນງ່າຍໆ ສຳ ລັບການຕັ້ງຄ່າການ ຈຳ ລອງແບບ MySQL (Master-Slave) ໃນ RHEL 6.3/6.2/6.1/6/5.8, CentOS 6.3/6.2/6.1/6/5.8 ແລະ Fedora 17 , 16,15,14,13,12 ໂດຍໃຊ້ເວີຊັນ MySQL ລ້າສຸດ. ຄູ່ມືນີ້ແມ່ນຖືກຂຽນຂື້ນເປັນພິເສດ ສຳ ລັບລະບົບປະຕິບັດການ CentOS 6.3, ແຕ່ຍັງເຮັດວຽກກັບການແຈກຈ່າຍ Linux ແບບເກົ່າກັບ MySQL 5.x.

ການລວບລວມຂໍ້ມູນ MySQL ແມ່ນມີປະໂຫຍດຫລາຍໃນແງ່ຂອງ Data Security, Fail-over Solution, ຖານຂໍ້ມູນ Backup ຈາກ Slave, Analytics ແລະອື່ນໆ. ພວກເຮົາໃຊ້ສິ່ງຕໍ່ໄປນີ້ເພື່ອປະຕິບັດຂັ້ນຕອນການ ຈຳ ລອງແບບ. ໃນສະຖານະການຂອງທ່ານມັນຈະແຕກຕ່າງກັນ.

<

  • ໃຊ້ Linux OS ເຊັ່ນ CentOS 6.3, RedHat 6.3 ຫຼື Fedora 17
  • ແມ່ບົດແລະ Slave ແມ່ນເຄື່ອງແມ່ຂ່າຍຂອງ Linux CentOS 6.3.
  • ທີ່ຢູ່ IP ຂອງແມ່ບົດແມ່ນ: 192.168.1.1.
  • ທີ່ຢູ່ IP Slave ແມ່ນ: 192.168.1.2.
  • Master ແລະ Slave ຢູ່ໃນເຄືອຂ່າຍ LAN ດຽວກັນ.
  • Master ແລະ Slave ໄດ້ຕິດຕັ້ງ MySQL ເວີຊັນ.
  • Master ອະນຸຍາດໃຫ້ເຊື່ອມຕໍ່ MySQL ຫ່າງໄກສອກຫຼີກໃນພອດ 3306.
  • ພວກເຮົາມີສອງເຊີບເວີ, ໜຶ່ງ ແມ່ນ Master ກັບ IP (192.168.1.1) ແລະເຄື່ອງອື່ນແມ່ນ Slave ຄື (192.168.1.2). ພວກເຮົາໄດ້ແບ່ງຂັ້ນຕອນການຈັດຕັ້ງເປັນສອງໄລຍະເພື່ອເຮັດໃຫ້ສິ່ງຕ່າງໆງ່າຍຂຶ້ນ ສຳ ລັບທ່ານ, ໃນໄລຍະທີ 1 ພວກເຮົາຈະ ກຳ ນົດຄ່າ server server ແລະໃນ Phase II ກັບ server Slave. ໃຫ້ເລີ່ມຕົ້ນຂະບວນການຕິດຕັ້ງແບບ ຈຳ ລອງແບບນີ້.

    ໄລຍະທີ 1: ການຕັ້ງຄ່າ Master Server (192.168.1.1) ສຳ ລັບການ ຈຳ ລອງການ ນຳ ໃຊ້

    ໃນໄລຍະທີ 1, ພວກເຮົາຈະເຫັນການຕິດຕັ້ງ MySQL, ຕັ້ງຄ່າ Replication ແລະຫຼັງຈາກນັ້ນກວດສອບການ ຈຳ ລອງແບບທົດແທນ.

    ກ່ອນອື່ນ ໝົດ, ດຳ ເນີນການຕິດຕັ້ງ MySQL ໂດຍໃຊ້ ຄຳ ສັ່ງ YUM. ຖ້າທ່ານມີການຕິດຕັ້ງ MySQL ຢູ່ແລ້ວ, ທ່ານສາມາດຂ້າມຂັ້ນຕອນນີ້ໄດ້.

    # yum install mysql-server mysql

    ເປີດເອກະສານການຕັ້ງຄ່າ my.cnf ກັບບັນນາທິການ VI.

    # vi /etc/my.cnf

    ເພີ່ມລາຍການຕໍ່ໄປນີ້ພາຍໃຕ້ສ່ວນ [mysqld] ແລະຢ່າລືມທີ່ຈະທົດແທນ tecmint ດ້ວຍຊື່ຖານຂໍ້ມູນທີ່ທ່ານຕ້ອງການທີ່ຈະຂຽນໃສ່ Slave.

    server-id = 1
    binlog-do-db=tecmint
    relay-log = /var/lib/mysql/mysql-relay-bin
    relay-log-index = /var/lib/mysql/mysql-relay-bin.index
    log-error = /var/lib/mysql/mysql.err
    master-info-file = /var/lib/mysql/mysql-master.info
    relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
    log-bin = /var/lib/mysql/mysql-bin

    ເລີ່ມຕົ້ນການບໍລິການ MySQL.

    # /etc/init.d/mysqld restart

    ເຂົ້າສູ່ MySQL ເປັນຜູ້ໃຊ້ຮາກແລະສ້າງຜູ້ໃຊ້ທາດແລະໃຫ້ສິດທິພິເສດ ສຳ ລັບການ ຈຳ ລອງແບບ ໃໝ່. ປ່ຽນແທນຜູ້ໃຊ້ qhev ກັບຜູ້ໃຊ້ແລະລະຫັດຜ່ານຂອງທ່ານດ້ວຍລະຫັດຜ່ານ.

    # mysql -u root -p
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'your_password';
    mysql> FLUSH PRIVILEGES;
    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> SHOW MASTER STATUS;
    
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000003 | 11128001 | tecmint		 |                  |
    +------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)
    
    mysql> quit;

    ກະລຸນາຂຽນຕົວເລກແຟ້ມ File (mysql-bin.000003) ແລະ ຕຳ ແໜ່ງ (11128001), ພວກເຮົາຕ້ອງການຕົວເລກເຫລົ່ານີ້ຕໍ່ມາໃນ server server. ຕໍ່ໄປ ນຳ ໃຊ້ READ LOCK ກັບຖານຂໍ້ມູນເພື່ອສົ່ງອອກຂໍ້ມູນທັງ ໝົດ ຂອງຖານຂໍ້ມູນແລະຂໍ້ມູນຂອງຖານຂໍ້ມູນດ້ວຍ ຄຳ ສັ່ງ mysqldump.

    #  mysqldump -u root -p --all-databases --master-data > /root/dbdump.db

    ເມື່ອທ່ານຖີ້ມຖານຂໍ້ມູນທັງ ໝົດ ແລ້ວ, ດຽວນີ້ເຊື່ອມຕໍ່ກັບ mysql ໃນຖານະຜູ້ໃຊ້ຮາກແລະຕາຕະລາງ unlcok.

    mysql> UNLOCK TABLES;
    mysql> quit;

    ອັບໂຫລດແຟ້ມຖານຂໍ້ມູນໃສ່ Slave Server (192.168.1.2) ໂດຍໃຊ້ ຄຳ ສັ່ງ SCP.

    scp /root/dbdump.db [email :/root/

    ນັ້ນແມ່ນສິ່ງທີ່ພວກເຮົາໄດ້ຕັ້ງຄ່າເຊີຟເວີ Master server ສຳ ເລັດແລ້ວ, ໃຫ້ໄປທີ່ພາກທີ 2.

    ໄລຍະທີ II: ຕັ້ງຄ່າ Server Slave (192.168.1.2) ສຳ ລັບການ ຈຳ ລອງການເຮັດວຽກ

    ໃນໄລຍະທີ 2, ພວກເຮົາເຮັດການຕິດຕັ້ງ MySQL, ຕັ້ງຄ່າ Replication ແລະຫຼັງຈາກນັ້ນກວດສອບການ ຈຳ ລອງແບບທົດແທນ.

    ຖ້າທ່ານບໍ່ໄດ້ຕິດຕັ້ງ MySQL, ຫຼັງຈາກນັ້ນຕິດຕັ້ງມັນໂດຍໃຊ້ ຄຳ ສັ່ງ YUM.

    # yum install mysql-server mysql

    ເປີດເອກະສານການຕັ້ງຄ່າ my.cnf ກັບບັນນາທິການ VI.

    # vi /etc/my.cnf

    ເພີ່ມລາຍການຕໍ່ໄປນີ້ພາຍໃຕ້ສ່ວນ [mysqld] ແລະຢ່າລືມທີ່ຈະປ່ຽນທີ່ຢູ່ IP ຂອງ Master server, tecmint ດ້ວຍຊື່ຂອງຖານຂໍ້ມູນແລະອື່ນໆ, ທີ່ທ່ານຕ້ອງການເຮັດກັບ Master.

    server-id = 2
    master-host=192.168.1.1
    master-connect-retry=60
    master-user=slave_user
    master-password=yourpassword
    replicate-do-db=tecmint
    relay-log = /var/lib/mysql/mysql-relay-bin
    relay-log-index = /var/lib/mysql/mysql-relay-bin.index
    log-error = /var/lib/mysql/mysql.err
    master-info-file = /var/lib/mysql/mysql-master.info
    relay-log-info-file = /var/lib/mysql/mysql-relay-log.info
    log-bin = /var/lib/mysql/mysql-bin

    ຕອນນີ້ ນຳ ເຂົ້າເອກະສານຂີ້ເຫຍື້ອທີ່ພວກເຮົາໄດ້ສົ່ງອອກໃນ ຄຳ ສັ່ງກ່ອນ ໜ້າ ນີ້ແລະເລີ່ມການບໍລິການ MySQL ຄືນ ໃໝ່.

    # mysql -u root -p < /root/dbdump.db
    # /etc/init.d/mysqld restart
    

    ເຂົ້າສູ່ MySQL ເປັນຜູ້ໃຊ້ຮາກແລະຢຸດໃຊ້ ສຳ ລອງ. ຫຼັງຈາກນັ້ນໃຫ້ບອກຂ້າທາດບ່ອນຊອກຫາເອກະສານ log log ຂອງ Master, ວ່າພວກເຮົາໄດ້ຂຽນຕົ້ນສະບັບດ້ວຍ SHOW MASTER STATUS; command ເປັນ File (mysql-bin.000003) ແລະ ຕຳ ແໜ່ງ (11128001). ທ່ານຕ້ອງປ່ຽນ 192.168.1.1 ເປັນທີ່ຢູ່ IP ຂອງ Master Server, ແລະປ່ຽນຜູ້ໃຊ້ແລະລະຫັດຜ່ານຕາມຄວາມ ເໝາະ ສົມ.

    # mysql -u root -p
    mysql> slave stop;
    mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_USER='slave_user', MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=11128001;
    mysql> slave start;
    mysql> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.1.1
                      Master_User: slave_user
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000003
              Read_Master_Log_Pos: 12345100
                   Relay_Log_File: mysql-relay-bin.000002
                    Relay_Log_Pos: 11381900
            Relay_Master_Log_File: mysql-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
                  Replicate_Do_DB: tecmint
              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: 12345100
                  Relay_Log_Space: 11382055
                  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:
    1 row in set (0.00 sec)

    ການຢັ້ງຢືນການ ຈຳ ລອງ MySQL ໃນ Master ແລະ Slave Server

    ມັນມີຄວາມ ສຳ ຄັນຫຼາຍທີ່ຈະຮູ້ວ່າການເຮັດແບບ ຈຳ ລອງເຮັດວຽກໄດ້ດີເລີດ. ໃນ Master server ສ້າງຕາຕະລາງແລະໃສ່ຄ່າບາງຢ່າງໃນນັ້ນ.

    mysql> create database tecmint;
    mysql> use tecmint;
    mysql> CREATE TABLE employee (c int);
    mysql> INSERT INTO employee (c) VALUES (1);
    mysql> SELECT * FROM employee;
    +------+
    |  c  |
    +------+
    |  1  |
    +------+
    1 row in set (0.00 sec)

    ການຢັ້ງຢືນ SLAVE, ໂດຍການໃຊ້ ຄຳ ສັ່ງດຽວກັນ, ມັນກໍ່ຈະສົ່ງຄືນຄ່ານິຍົມໃນທາດເຊັ່ນກັນ.

    mysql> use tecmint;
    mysql> SELECT * FROM employee;
    +------+
    |  c  |
    +------+
    |  1  |
    +------+
    1 row in set (0.00 sec)

    ນັ້ນແມ່ນມັນ, ສຸດທ້າຍທ່ານໄດ້ຕັ້ງຄ່າ MySQL Replication ໃນສອງສາມຂັ້ນຕອນງ່າຍໆ. ຂໍ້ມູນເພີ່ມເຕີມສາມາດຫາໄດ້ທີ່ປື້ມຄູ່ມືກ່ຽວກັບການ ຈຳ ລອງແບບ MySQL.