Thứ hai, 05/10/2015 | 00:00 GMT+7

Cơ sở hạ tầng SaltStack: Tạo Salt States cho server database MySQL

SaltStack, hay Salt, là một hệ thống quản lý cấu hình và thực thi từ xa mạnh mẽ được dùng để dễ dàng quản lý cơ sở hạ tầng theo cách có cấu trúc, có thể lặp lại. Trong loạt bài này, ta sẽ trình bày một phương pháp quản lý môi trường phát triển, dàn dựng và production của bạn từ việc triển khai Salt. Ta sẽ sử dụng hệ thống trạng thái Salt để viết và áp dụng các hành động có thể lặp lại. Điều này sẽ cho phép ta phá hủy bất kỳ môi trường nào của ta , an toàn khi biết rằng ta có thể dễ dàng đưa chúng trở lại trực tuyến ở trạng thái giống hệt nhau sau này.

Trong hướng dẫn cuối cùng của loạt bài này, ta cài đặt HAProxy làm công cụ cân bằng tải trước các web server của ta . Trong hướng dẫn này, ta sẽ thay đổi trọng tâm của bạn để tạo các trạng thái sẽ cài đặt và quản lý các server database MySQL của ta trong từng môi trường của ta . Bài viết này sẽ trình bày về cài đặt và cài đặt cơ bản của MySQL. Trong hướng dẫn trong tương lai, ta sẽ giải quyết nhiệm vụ phức tạp hơn là cài đặt sao chép.

Nhận thông tin nhắc nhở về MySQL với debconf-utils

Quá trình tạo trạng thái MySQL của ta sẽ phức tạp hơn một chút so với các ví dụ trước đây của ta với Nginx và MySQL. Không giống như hai bước cài đặt khác, cài đặt MySQL thường liên quan đến việc trả lời một tập hợp các dấu nhắc để đặt password root MySQL.

Trước khi bắt đầu với file trạng thái của bạn , ta nên thực hiện cài đặt thử nghiệm MySQL trên một trong các tay sai của ta . Sau đó, ta có thể sử dụng gói debconf-utils để nhận thông tin về các dấu nhắc mà ta cần điền vào.

Nếu bạn chưa có môi trường dàn dựng của bạn , bạn có thể sử dụng file bản đồ môi trường dàn dựng mà ta đã tạo trước đây để tạo ra môi trường:

  • sudo salt-cloud -P -m /etc/salt/cloud.maps.d/stage-environment.map

Sau khi server database của bạn hoạt động và khả dụng, hãy chọn một trong các server database của bạn để cài đặt MySQL để ta có thể lấy thông tin liên quan từ việc cài đặt:

  • sudo salt stage-db1 pkg.install mysql-server

Để dễ dàng truy vấn database debconf để biết thông tin nhanh chóng mà ta cần, ta cũng nên cài đặt gói debconf-utils trên minion database :

  • sudo salt stage-db1 pkg.install debconf-utils

Chức năng debconf trong Salt sẽ khả dụng ngay bây giờ khi gói này được cài đặt. Ta có thể sử dụng hàm module thực thi debconf.get_selections để lấy tất cả thông tin nhắc từ minion database . Ta nên chia less điều này vì điều này sẽ trả về tất cả thông tin từ các gói được cài đặt trên server đó:

  • sudo salt stage-db1 debconf.get_selections | less

Trong kết quả , hãy tìm phần liên quan đến MySQL. Nó trông giống như sau :

Output
. . . mysql-server-5.5: |_ - mysql-server/root_password - password |_ - mysql-server/root_password_again - password |_ - mysql-server-5.5/really_downgrade - boolean - false |_ - mysql-server-5.5/start_on_boot - boolean - true . . .

Hai mục trên cùng chứa các tên trường mà ta cần ( mysql-server/root_passwordmysql-server/root_password_again ). Dòng thứ hai của các mục này chỉ định loại trường mà ta cần chỉ định trong file trạng thái của bạn .

Khi bạn đã sao chép thông tin này từ kết quả debconf , ta cũng nên tiếp tục và lấy file /etc/mysql/my.cnf . Ta cần điều này sau khi ta cấu hình các trạng thái MySQL của bạn :

  • sudo salt stage-db1 cp.push /etc/mysql/my.cnf

Sau khi đẩy file /etc/mysql/my.cnf trở lại Salt master, ta có thể xóa tài nguyên để ta có một phương tiện chặn sạch sẽ để kiểm tra sau trong hướng dẫn:

  • sudo salt-cloud -d stage-db1

Sau khi server bị xóa, bạn có thể tạo lại nó ở chế độ nền bằng lệnh như sau. sm trong trường hợp này là tên của server chính Salt của ta , server này có thông tin đăng nhập cloud thích hợp:

  • sudo salt --async sm cloud.profile stage-db stage-db1

Trong khi server database của bạn đang xây dựng lại, ta có thể bắt đầu xây dựng file trạng thái MySQL.

Tạo file trạng thái MySQL chính

Ta sẽ bắt đầu bằng cách tạo một folder cho trạng thái MySQL của ta trong folder /srv/salt :

  • sudo mkdir -p /srv/salt/mysql

Trong folder này, ta có thể tạo và mở file init.sls để lưu trữ file trạng thái MySQL chính của ta :

  • sudo nano /srv/salt/mysql/init.sls

Ta cần đảm bảo gói debconf-utils được cài đặt trên minion để dễ dàng đặt các giá trị ta cần. Ta có thể làm điều này với module trạng thái pkg.installed :

/srv/salt/mysql/init.sls
debconf-utils:   pkg.installed 

Sau khi gói debconf-utils được cài đặt, ta có thể gieo trước câu trả lời cho dấu nhắc bằng module trạng thái debconf.set . Ta sẽ sử dụng thuộc tính name để chỉ định tên gói mà ta muốn đặt dấu nhắc . Sau đó, ta tạo một cấu trúc data chứa từ điển thông tin được dùng để điền vào các dấu nhắc .

Cấu trúc data về cơ bản sử dụng thông tin về dấu nhắc mà ta đã truy vấn từ cài đặt MySQL thử nghiệm của ta . Ta biết tên trường và kiểu dữ liệu sẽ được sử dụng cho các trường này. Để chỉ định password thực sự, ta sẽ lấy từ hệ thống cột muối với chức năng module thực thi pillar.get .

Chút nữa ta sẽ cài đặt password trong hệ thống trụ. Điều này sẽ cho phép ta giữ dữ liệu password riêng biệt với cấu hình của ta .

Ghi chú
Hãy chú ý đến phần thụt lề của từ điển được lưu trữ trong data . Toàn bộ khối được thụt vào thêm bốn khoảng trắng thay vì thụt vào hai khoảng trắng thông thường. Điều này xảy ra khi một từ điển được nhúng trong danh sách YAML. Bạn có thể tìm hiểu thêm bằng cách truy cập liên kết này .

/srv/salt/mysql/init.sls
debconf-utils:   pkg.installed  mysql_setup:   debconf.set:     - name: mysql-server     - data:         'mysql-server/root_password': {'type': 'password', 'value': '{{ salt['pillar.get']('mysql:root_pw', '') }}' }         'mysql-server/root_password_again': {'type': 'password', 'value': '{{ salt['pillar.get']('mysql:root_pw', '') }}' }     - require:       - pkg: debconf-utils 

Để thực sự tương tác với MySQL, các thư viện Python thích hợp phải có sẵn trên các server database . Ta có thể cài đặt gói ptyhon-mysqldb đảm bảo rằng ta có quyền truy cập vào các khả năng MySQL của Salt. Sau đó, ta có thể cài đặt phần mềm server MySQL thực một cách an toàn. Ta sẽ sử dụng require đảm bảo rằng debconf và các thư viện Python đều có sẵn.

Sau khi cài đặt, ta có thể thêm trạng thái dịch vụ đảm bảo rằng dịch vụ đang chạy. Điều này sẽ theo dõi các thay đổi trong gói server MySQL. Nó cũng sẽ xem file cấu hình MySQL cơ bản và sẽ reload dịch vụ nếu phát hiện thấy các thay đổi:

/srv/salt/mysql/init.sls
debconf-utils:   pkg.installed  mysql_setup:   debconf.set:     - name: mysql-server     - data:         'mysql-server/root_password': {'type': 'password', 'value': '{{ salt['pillar.get']('mysql:root_pw', '') }}' }         'mysql-server/root_password_again': {'type': 'password', 'value': '{{ salt['pillar.get']('mysql:root_pw', '') }}' }     - require:       - pkg: debconf-utils  python-mysqldb:   pkg.installed  mysql-server:   pkg.installed:     - require:       - debconf: mysql-server       - pkg: python-mysqldb  mysql:   service.running:     - watch:       - pkg: mysql-server       - file: /etc/mysql/my.cnf 

Có một vài file mà ta cần quản lý bằng MySQL. Tệp rõ ràng nhất mà ta cần quản lý là file /etc/mysql/my.cnf mà ta đã đề cập ở trên. Ta cần thực hiện một số thay đổi dựa trên thông tin biến, vì vậy file này sẽ phải là mẫu Jinja.

Các file khác mà ta cần quản lý liên quan đến việc quản lý hệ thống MySQL của Salt. Để quản lý database , Salt minion phải có thông tin về cách kết nối với RDBMS. Đầu tiên, ta có thể tạo một file đơn giản trong folder /etc/salt/minion.d . Điều này sẽ chỉ đơn giản là liệt kê file nơi có thể tìm thấy chi tiết kết nối của ta . Tệp có chi tiết kết nối database là file khác mà ta cần quản lý. Tệp kết nối database cần phải là một mẫu:

/srv/salt/mysql/init.sls
. . .  mysql:   service.running:     - watch:       - pkg: mysql-server       - file: /etc/mysql/my.cnf  /etc/mysql/my.cnf:   file.managed:     - source: salt://mysql/files/etc/mysql/my.cnf.jinja     - template: jinja     - user: root     - group: root     - mode: 640     - require:       - pkg: mysql-server  /etc/salt/minion.d/mysql.conf:   file.managed:     - source: salt://mysql/files/etc/salt/minion.d/mysql.conf     - user: root     - group: root     - mode: 640     - require:       - service: mysql  /etc/mysql/salt.cnf:   file.managed:     - source: salt://mysql/files/etc/mysql/salt.cnf.jinja     - template: jinja     - user: root     - group: root     - mode: 640     - require:       - service: mysql 

Cuối cùng, ta cần bao gồm một trạng thái service.restart sẽ reload chính quá trình salt-minion . Điều này là cần thiết để tay sai của ta nhận file /etc/salt/minion.d/mysql.conf . Ta chỉ muốn salt-minion được khởi động lại khi có các thay đổi đối với chính file /etc/salt/minion.d/mysql.conf . Ta có thể sử dụng một watch cần thiết để thực hiện điều đó:

/srv/salt/mysql/init.sls
. . .  /etc/mysql/salt.cnf:   file.managed:     - source: salt://mysql/files/etc/mysql/salt.cnf.jinja     - template: jinja     - user: root     - group: root     - mode: 640     - require:       - service: mysql  restart_minion_for_mysql:   service.running:     - name: salt-minion     - watch:       - file: /etc/salt/minion.d/mysql.conf 

Khi bạn hoàn tất việc thêm các chi tiết ở trên, hãy lưu file .

Tạo Trụ cột cho MySQL

Trong trạng thái MySQL của ta , ta đã sử dụng hàm module thực thi pillar.get để điền password root MySQL với một giá trị từ hệ thống trụ cột. Ta cần cài đặt trụ cột này để trạng thái có thể lấy dữ liệu cần thiết để xây dựng thông tin xác thực database .

Hệ thống trụ cột là hoàn hảo cho loại trường hợp sử dụng này vì nó cho phép bạn gán dữ liệu cho các server nhất định. Server không phù hợp sẽ không có quyền truy cập vào dữ liệu nhạy cảm. Lúc này, bang của ta chỉ cần password root . Ta đã chỉ định vị trí trong hệ thống trụ cột là mysql:root_pw . Bây giờ ta sẽ cài đặt khóa đó.

Tạo file hàng đầu cho hệ thống trụ cột

Trước khi tạo các file trụ cột MySQL mà ta cần, ta cần tạo một file “hàng đầu” trụ cột. Tệp trên cùng được sử dụng để khớp các tay sai của Salt với dữ liệu trụ cột. Những tay sai của Salt sẽ không thể truy cập vào bất kỳ dữ liệu trụ cột nào mà chúng không khớp trong file trên cùng.

Thư mục /srv/pillar nên được tạo trong quá trình cài đặt. Ta có thể tạo file top.sls trong folder này để bắt đầu:

  • cd /srv/pillar
  • sudo nano top.sls

Bên trong, ta cần chỉ định môi trường base ( ta không sử dụng quan niệm của Salt về các môi trường trong loạt bài này do sự phức tạp và một số hành vi không có giấy tờ. Tất cả các server của ta hoạt động trong môi trường base và sử dụng ngũ cốc để chỉ định môi trường). Ta sẽ sử dụng kết hợp ghép để so khớp các node . Ta sẽ so khớp role server và môi trường server để xác định các trụ cột để chỉ định cho mỗi server .

Các trụ cột sử dụng ký hiệu dấu chấm để biểu thị các file trong một folder . Ví dụ, root của hệ thống trụ cột là /srv/pillar . Để gán cột mysql.sls nằm trong folder dev , ta sử dụng dev.mysql .

Bài tập ta cần cho hướng dẫn này trông giống như sau:

/srv/pillar/top.sls
base:   'G@env:dev and G@role:dbserver':     - match: compound     - dev.mysql    'G@env:stage and G@role:dbserver':     - match: compound     - stage.mysql    'G@env:prod and G@role:dbserver':     - match: compound     - prod.mysql 

Lưu file khi bạn hoàn tất.

Tạo trụ cột dành riêng cho môi trường

Ở trên, ta đã chỉ định các trụ cột cho các server dựa trên role và môi trường. Điều này cho phép ta chỉ định kết nối và thông tin xác thực khác nhau cho các môi trường khác nhau.

Bắt đầu bằng cách tạo các folder được tham chiếu trong file trên cùng của trụ cột:

  • sudo mkdir /srv/pillar/{prod,stage,dev}

Tiếp theo, ta nên tạo một file myslq.sls trong mỗi folder này. Ta có thể bắt đầu với file /srv/salt/stage/mysql.sls , vì ta hiện đang sử dụng môi trường dàn để kiểm tra:

  • sudo nano /srv/pillar/stage/mysql.sls

Tệp trạng thái mà ta đã tạo muốn lấy password root MySQL từ hệ thống trụ cột bằng cách sử dụng khóa mysql:root_pw . Đây thực sự là một khóa lồng nhau, nghĩa là root_pw là con của khóa mysql . Với ý nghĩ này, ta có thể chọn password cho user root MySQL của bạn và đặt nó trong file như sau:

/srv/pillar/stage/mysql.sls
mysql:   root_pw: staging_mysql_root_pass 

Chọn bất kỳ password nào bạn muốn sử dụng. Khi bạn hoàn tất, hãy lưu file . Đây là tất cả những gì ta cần lúc này.

Tạo một file tương tự trong trụ cột phát triển của bạn:

  • sudo nano /srv/pillar/dev/mysql.sls
/srv/pillar/dev/mysql.sls
mysql:   root_pw: development_mysql_root_pass 

Làm tương tự cho trụ cột môi trường production của bạn:

  • sudo nano /srv/pillar/prod/mysql.sls
/srv/pillar/prod/mysql.sls
mysql:   root_pw: production_mysql_root_pass 

Chọn các password khác nhau cho từng môi trường này.

Ta sẽ quay lại các trụ cột này sau vì ta cần thêm dữ liệu không thuộc về chính cấu hình. Hiện tại, hãy lưu và đóng mọi file đang mở.

Tạo Mẫu /etc/mysql/my.cnf.jinja

Ta đã tạo file trạng thái MySQL cơ bản của bạn trước đó, nhưng ta chưa bao giờ tạo file được quản lý để cài đặt.

Khi ta thực hiện cài đặt thử nghiệm mysql-server trên mysql-server stage-db1 của ta trước đó, ta đã đẩy file /etc/mysql/my.cnf lên bản chính. Điều đó sẽ vẫn có sẵn trong bộ nhớ cache chính của Salt của ta . Ta có thể sao chép toàn bộ cấu trúc folder dẫn đến file bộ nhớ cache đó vào folder /srv/salt/mysql của ta bằng lệnh :

  • sudo cp -r /var/cache/salt/master/minions/stage-db1/files /srv/salt/mysql

Đi tới folder chứa file mycnf sao chép trong folder trạng thái MySQL:

  • cd /srv/salt/mysql/files/etc/mysql

Sao chép file vì nó hiện đang tồn tại sang hậu tố .orig để ta có thể hoàn nguyên các thay đổi nếu cần:

  • sudo cp my.cnf my.cnf.orig

Tiếp theo, đổi tên file my.cnf để có hậu tố .jinja . Trong nháy mắt, điều này sẽ cho ta biết rằng file này là một mẫu, không phải là một file có thể được đưa vào server lưu trữ mà không cần hiển thị:

  • sudo mv my.cnf my.cnf.jinja

Mở file mẫu Jinja để bắt đầu với các chỉnh sửa cần thiết:

  • sudo nano my.cnf.jinja

Tất cả những thay đổi mà ta muốn tạo bây giờ đều liên quan đến việc cho phép kết nối MySQL từ xa. Như hiện tại, MySQL liên kết với giao diện loopback local . Ta muốn cài đặt điều này để lắng nghe trên địa chỉ mạng riêng của nút.

Để thực hiện việc này, hãy tìm dòng bind-address trong phần [mysqld] . Ta sẽ sử dụng chức năng module thực thi network.interface_ip để lấy địa chỉ được gán cho giao diện eth1 của minion.

/srv/salt/mysql/files/etc/mysql/my.cnf.jinja
. . .  [mysqld]  . . .  bind-address            = {{ salt['network.interface_ip']('eth1') }} 

Một bổ sung khác mà ta cần thực hiện là tắt phân giải tên DNS cho các server của ta . Bằng cách thêm tùy chọn skip-name-resolve , MySQL sẽ không bị lỗi nếu nó không thể hoàn thành việc phân giải tên và tên đảo ngược:

/srv/salt/mysql/files/etc/mysql/my.cnf.jinja
. . .  [mysqld]  . . .  bind-address            = {{ salt['network.interface_ip']('eth1') }} skip-name-resolve 

Lưu file khi bạn hoàn tất.

Tạo file /etc/salt/minion.d/mysql.conf

Tiếp theo, ta cần tạo file được quản lý được sử dụng để sửa đổi cấu hình của minion với kiến thức về cách kết nối với database MySQL. Thay vì giữ cấu hình trong chính file /etc/salt/minion , ta sẽ đặt một file mới vào folder /etc/salt/minion.d cho minion biết nơi tìm thông tin kết nối.

Bắt đầu bằng cách tạo cấu trúc folder cần thiết trong folder /srv/salt/mysql/files :

  • sudo mkdir -p /srv/salt/mysql/files/etc/salt/minion.d

Ta có thể tạo một file trong folder này có tên là mysql.conf :

  • sudo nano /srv/salt/mysql/files/etc/salt/minion.d/mysql.conf

Bên trong, ta chỉ cần đặt một tùy chọn: vị trí của file thông tin kết nối. Trong trường hợp của ta , ta sẽ đặt file này thành file tại /etc/mysql/salt.cnf :

/srv/salt/mysql/files/etc/salt/minion.d/mysql.conf
mysql.default_file: '/etc/mysql/salt.cnf' 

Lưu file khi bạn hoàn tất.

Tạo Tệp Mẫu /etc/mysql/salt.cnf

Bây giờ, ta cần tạo file mà cấu hình minion của ta đã tham chiếu. Đây sẽ là file mẫu vì ta cần lấy một số chi tiết kết nối từ hệ thống trụ cột. Ta sẽ đặt file này trong folder /srv/salt/mysql/files/etc/mysql :

  • sudo nano /srv/salt/mysql/files/etc/mysql/salt.cnf.jinja

Bên trong, ta cần mở một phần [client] để chỉ định loại thông tin mà ta đang xác định. Bên dưới tiêu đề này, ta có thể chỉ định client kết nối với máy local với user root MySQL tại socket Unix nằm tại /var/run/mysqld/mysqld.sock . Đây là tất cả các giá trị MySQL mặc định:

/srv/salt/mysql/files/etc/mysql/salt.cnf.jinja
[client] host                = localhost user                = root socket              = /var/run/mysqld/mysqld.sock 

Điều duy nhất ta cần thêm bây giờ là password . , ta sẽ lấy nó trực tiếp từ hệ thống trụ cột giống như cách ta đã làm trong phần debconf của file trạng thái MySQL của ta . Nó trông giống như sau :

/srv/salt/mysql/files/etc/mysql/salt.cnf.jinja
[client] host                = localhost user                = root socket              = /var/run/mysqld/mysqld.sock password            = {{ salt['pillar.get']('mysql:root_pw', '') }} 

Lưu file khi bạn hoàn tất.

Cài đặt thử nghiệm và kiểm tra tình trạng

Bây giờ ta có trạng thái cài đặt cơ bản và các file hỗ trợ được cấu hình , ta nên nhanh chóng kiểm tra cài đặt của bạn đảm bảo rằng nó đang hoạt động chính xác.

Ta sẽ bắt đầu bằng cách trải qua quá trình thử nghiệm điển hình của ta . Sử dụng hàm module thực thi state.show_sls đảm bảo rằng nó có thể hiển thị file trạng thái của bạn:

  • sudo salt stage-db1 state.show_sls mysql

Xem qua kết quả kết quả đảm bảo rằng Salt không có vấn đề gì khi phân tích cú pháp file /srv/salt/mysql/init.sls của bạn.

Tiếp theo, chạy khô ứng dụng trạng thái bằng cách thêm test=True vào cuối chức năng module thực thi state.apply :

  • sudo salt stage-db1 state.apply mysql test=True

Lệnh này dự kiến sẽ không thành công . Bởi vì một số chức năng trạng thái trong file của ta không khả dụng cho đến sau khi các gói cụ thể được cài đặt, dự kiến sẽ xảy ra lỗi trong quá trình chạy khô. Trong quá trình chạy thực tế, thứ tự trạng thái sẽ đảm bảo các gói yêu cầu được cài đặt trước khi các trạng thái sử dụng chúng được gọi.

Tất cả các comment cho trạng thái không thành công phải cho biết "một hoặc nhiều yêu cầu không thành công" ngoại trừ trạng thái mysql_setup , trạng thái này sẽ thất bại do debconf.set không khả dụng (đây chỉ là một lỗi tiên quyết khác). Sử dụng kết quả ở đây đảm bảo rằng không có lỗi không liên quan nào khác xuất hiện.

Sau khi chạy thử nghiệm, ta có thể áp dụng trạng thái bằng lệnh :

  • sudo salt stage-db1 state.apply mysql

Điều này sẽ dẫn đến một trạng thái chạy thành công.

Ta cần kiểm tra xem Salt có thể kết nối và truy vấn database MySQL hay không. Đảm bảo rằng bạn có thể liệt kê các database mặc định bằng lệnh :

  • sudo salt stage-db1 mysql.db_list

Bạn sẽ nhận được một danh sách trông giống như sau:

Output
stage-db1: - information_schema - mysql - performance_schema

Điều này cho biết Salt có thể kết nối với version MySQL bằng cách sử dụng thông tin được chỉ định trong file /etc/mysql/salt.cnf .

Bây giờ ta đã xác minh trạng thái MySQL cơ sở của ta hoạt động chính xác, ta có thể xóa server stage-db1 :

  • sudo salt-cloud -d stage-db1

Tạo lại server trong nền để ta có nó để kiểm tra thêm sau này. , sm là tên của server chính Salt của ta trong trường hợp này:

  • sudo salt --async sm cloud.profile stage-db stage-db1

Bây giờ, cài đặt MySQL cơ bản của ta đã hoàn tất.

Kết luận

Đến đây bạn sẽ có các trạng thái sẽ cài đặt MySQL trên tay sai của bạn. Những điều này cũng sẽ khởi động quá trình salt-minion trên mỗi server này để Salt có thể kết nối và quản lý các database liên quan.

Trong khi các trạng thái hiện tại của ta cài đặt MySQL và cấu hình các tay sai của ta để kiểm soát hệ thống database , thì hiện tại các database của ta hoàn toàn riêng biệt. Trong hướng dẫn trong tương lai, ta sẽ giải quyết sao chép database MySQL để dữ liệu của ta nhất quán trên từng database của ta trong mỗi môi trường.


Tags:

Các tin liên quan

Cách sử dụng Mytop để theo dõi hiệu suất MySQL
2015-08-27
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên CentOS 7
2015-04-24
Cách tạo bản hot backup của database MySQL với Percona XtraBackup trên Ubuntu 14.04
2015-04-21
Cách chuẩn bị cho việc nâng cấp MySQL 5.7 của bạn
2015-04-20
Cách sử dụng MySQL hoặc MariaDB với Ứng dụng Django của bạn trên Ubuntu 14.04
2015-03-24
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 14.04
2015-03-18
Cách sử dụng MySQL với ứng dụng Ruby on Rails của bạn trên CentOS 7
2015-03-17
Cách đo hiệu suất truy vấn MySQL với mysqlslap
2014-10-02
Cách di chuyển database MySQL sang server mới trên Ubuntu 14.04
2014-05-22
Cách tối ưu hóa hiệu suất WordPress với MySQL Replication trên Ubuntu 14.04
2014-05-21