ວິທີການປ່ຽນລາຍຊື່ຂໍ້ມູນ MySQL/MariaDB ໃນ Linux


ຫຼັງຈາກຕິດຕັ້ງສ່ວນປະກອບຂອງ LAMP stack ໃນ server CentOS/RHEL 7, ມີສອງສາມຢ່າງທີ່ທ່ານອາດຈະຢາກເຮັດ.

ບາງສິ່ງບາງຢ່າງທີ່ພວກເຂົາຕ້ອງເຮັດກັບການເພີ່ມຄວາມປອດໄພຂອງ Apache ແລະ MySQL/MariaDB, ໃນຂະນະທີ່ອີກອັນ ໜຶ່ງ ອາດຈະສາມາດ ນຳ ໃຊ້ໄດ້ຫຼືບໍ່ຖືກຕ້ອງຕາມການຕັ້ງຄ່າຫລືຄວາມຕ້ອງການຂອງພວກເຮົາ.

ຕົວຢ່າງ, ໂດຍອີງໃສ່ການ ນຳ ໃຊ້ທີ່ຄາດວ່າຈະໃຊ້ຂອງຖານຂໍ້ມູນ, ພວກເຮົາອາດຈະຕ້ອງການປ່ຽນໄດເລກະທໍລີຂໍ້ມູນແບບເລີ່ມຕົ້ນ (/var/lib/mysql ) ໄປຢູ່ບ່ອນອື່ນ. ນີ້ແມ່ນກໍລະນີເມື່ອໄດເລກະທໍລີດັ່ງກ່າວຄາດວ່າຈະຂະຫຍາຍຕົວຍ້ອນການ ນຳ ໃຊ້ສູງ.

ຖ້າບໍ່ດັ່ງນັ້ນ, ລະບົບແຟ້ມເອກະສານທີ່ /var ຖືກເກັບໄວ້ອາດຈະລົ້ມລົງໃນເວລາດຽວກັນເຮັດໃຫ້ລະບົບທັງ ໝົດ ລົ້ມເຫຼວ. ສະຖານະການອື່ນທີ່ການປ່ຽນແປງໄດເລກະທໍລີເລີ່ມຕົ້ນແມ່ນເມື່ອພວກເຮົາມີສ່ວນແບ່ງເຄືອຂ່າຍທີ່ອຸທິດຕົນທີ່ພວກເຮົາຕ້ອງການໃຊ້ເພື່ອເກັບຂໍ້ມູນຕົວຈິງຂອງພວກເຮົາ.

ດ້ວຍເຫດຜົນນີ້, ໃນບົດຂຽນນີ້, ພວກເຮົາຈະອະທິບາຍວິທີການປ່ຽນຖານຂໍ້ມູນ MySQL/MariaDB ໃນຕອນຕົ້ນໄປສູ່ເສັ້ນທາງທີ່ແຕກຕ່າງກັນໃນເຄື່ອງແມ່ຂ່າຍຂອງ CentOS/RHEL 7 ແລະການແຈກຈ່າຍ Ubuntu/Debian.

ເຖິງແມ່ນວ່າພວກເຮົາຈະ ນຳ ໃຊ້ MariaDB, ແນວຄວາມຄິດທີ່ໄດ້ອະທິບາຍແລະບາດກ້າວທີ່ໄດ້ປະຕິບັດໃນບົດຂຽນນີ້ແມ່ນໃຊ້ໄດ້ທັງ MySQL ແລະ MariaDB ເວັ້ນເສຍແຕ່ໄດ້ຍົກໃຫ້ເຫັນໃນທາງອື່ນ.

ການປ່ຽນຖານຂໍ້ມູນ MySQL/MariaDB ໃນຕອນຕົ້ນ

ໝາຍ ເຫດ: ພວກເຮົາຈະຄາດເດົາວ່າໄດເລກະທໍລີຂໍ້ມູນ ໃໝ່ ຂອງພວກເຮົາແມ່ນ /mnt/mysql-data . ມັນເປັນສິ່ງສໍາຄັນທີ່ຄວນສັງເກດວ່າໄດເລກະທໍລີນີ້ຄວນເປັນເຈົ້າຂອງໂດຍໃຊ້ mysql: mysql .

# mkdir /mnt/mysql-data
# chown -R mysql:mysql /mnt/mysql-data

ເພື່ອຄວາມສະດວກສະບາຍຂອງທ່ານ, ພວກເຮົາໄດ້ແບ່ງຂະບວນການອອກເປັນ 5 ຂັ້ນຕອນທີ່ງ່າຍຕໍ່ການຕິດຕາມ:

ເພື່ອເລີ່ມຕົ້ນ, ມັນແມ່ນມີຄຸນຄ່າແລະດີທີ່ຈະລະບຸໄດເລກະທໍລີຂໍ້ມູນໃນປະຈຸບັນໂດຍໃຊ້ ຄຳ ສັ່ງຕໍ່ໄປນີ້. ຢ່າພຽງແຕ່ສົມມຸດວ່າມັນຍັງ /var/lib/mysql ເພາະມັນອາດຈະມີການປ່ຽນແປງໃນອະດີດ.

# mysql -u root -p -e "SELECT @@datadir;"

ຫຼັງຈາກທີ່ທ່ານໃສ່ລະຫັດຜ່ານ MySQL, ຜົນຜະລິດຄວນຈະຄ້າຍຄືກັນ.

ເພື່ອຫລີກລ້ຽງການສໍ້ລາດບັງຫຼວງຂໍ້ມູນ, ໃຫ້ຢຸດການບໍລິການຖ້າມັນ ກຳ ລັງ ດຳ ເນີນການກ່ອນ ດຳ ເນີນການ. ໃຊ້ ຄຳ ສັ່ງທີ່ມີຊື່ສຽງໃນລະບົບເພື່ອເຮັດແນວນັ້ນ:

------------- On SystemD ------------- 
# systemctl stop mariadb
# systemctl is-active mariadb

------------- On SysVInit ------------- 
# service mysqld stop
# service mysqld status

OR

# service mysql stop
# service mysql status

ຖ້າການບໍລິການຖືກຫຼຸດລົງ, ຜົນຜະລິດຂອງ ຄຳ ສັ່ງສຸດທ້າຍຄວນຈະເປັນດັ່ງຕໍ່ໄປນີ້:

ຫຼັງຈາກນັ້ນຄັດລອກເນື້ອໃນຂອງ /var/lib/mysql ເພື່ອ /mnt/mysql-data ຮັກສາສິດອະນຸຍາດເດີມແລະເວລາ:

# cp -R -p /var/lib/mysql/* /mnt/mysql-data

ແກ້ໄຂເອກະສານການຕັ້ງຄ່າ ( my.cnf ) ເພື່ອຊີ້ບອກໄດເລກະທໍລີຂໍ້ມູນ ໃໝ່ (/mnt/mysql-data ໃນກໍລະນີນີ້).

# vi /etc/my.cnf
OR
# vi /etc/mysql/my.cnf

ຊອກຫາພາກສ່ວນ [mysqld] ແລະ [ລູກຄ້າ] ແລະເຮັດການປ່ຽນແປງດັ່ງຕໍ່ໄປນີ້:

Under [mysqld]:
datadir=/mnt/mysql-data
socket=/mnt/mysql-data/mysql.sock

Under [client]:
port=3306
socket=/mnt/mysql-data/mysql.sock

ບັນທຶກການປ່ຽນແປງແລ້ວ ດຳ ເນີນຂັ້ນຕອນຕໍ່ໄປ.

ຂັ້ນຕອນນີ້ແມ່ນສາມາດໃຊ້ໄດ້ກັບ RHEL/CentOS ແລະອະນຸພັນຂອງມັນເທົ່ານັ້ນ.

ຕື່ມສະພາບການຄວາມປອດໄພຂອງ SELinux ໃສ່ /mnt/mysql-data ກ່ອນທີ່ຈະເລີ່ມ ໃໝ່ MariaDB.

# semanage fcontext -a -t mysqld_db_t "/mnt/mysql-data(/.*)?"
# restorecon -R /mnt/mysql-data

ຕໍ່ໄປເລີ່ມການບໍລິການ MySQL.

------------- On SystemD ------------- 
# systemctl stop mariadb
# systemctl is-active mariadb

------------- On SysVInit ------------- 
# service mysqld stop
# service mysqld status

OR

# service mysql stop
# service mysql status

ຕອນນີ້, ໃຊ້ ຄຳ ສັ່ງດຽວກັນກັບໃນຂັ້ນຕອນທີ 1 ເພື່ອກວດສອບສະຖານທີ່ຂອງໄດເລກະທໍລີຂໍ້ມູນ ໃໝ່:

# mysql -u root -p -e "SELECT @@datadir;"

ເຂົ້າສູ່ລະບົບ MariaDB, ສ້າງຖານຂໍ້ມູນ ໃໝ່ ແລະຫຼັງຈາກນັ້ນກວດເບິ່ງ /mnt/mysql-data :

# mysql -u root -p -e "CREATE DATABASE tecmint;"

ຊົມເຊີຍ! ທ່ານໄດ້ປ່ຽນຖານຂໍ້ມູນ ສຳ ລັບ MySQL ຫຼື MariaDB ສຳ ເລັດແລ້ວ.

ໃນຂໍ້ຄວາມນີ້, ພວກເຮົາໄດ້ປຶກສາຫາລືກ່ຽວກັບວິທີການປ່ຽນໄດເລກະທໍລີຂໍ້ມູນໃນເຄື່ອງແມ່ຂ່າຍ MySQL ຫຼື MariaDB ທີ່ໃຊ້ໃນ CentOS/RHEL 7 ແລະການແຈກຈ່າຍ Ubuntu/Debian.

ທ່ານມີ ຄຳ ຖາມຫຼື ຄຳ ເຫັນຫຍັງກ່ຽວກັບບົດຂຽນນີ້? ຮູ້ສຶກວ່າບໍ່ເສຍຄ່າທີ່ຈະແຈ້ງໃຫ້ພວກເຮົາຮູ້ໂດຍໃຊ້ແບບຟອມລຸ່ມນີ້ - ພວກເຮົາຍິນດີທີ່ຈະໄດ້ຍິນຈາກທ່ານ!