ວິທີການຕັ້ງຄ່າຕົວແບບ 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 ແລະອື່ນໆ. ພວກເຮົາໃຊ້ສິ່ງຕໍ່ໄປນີ້ເພື່ອປະຕິບັດຂັ້ນຕອນການ ຈຳ ລອງແບບ. ໃນສະຖານະການຂອງທ່ານມັນຈະແຕກຕ່າງກັນ.
<
ພວກເຮົາມີສອງເຊີບເວີ, ໜຶ່ງ ແມ່ນ 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.