Sử dụng Master - Slave mySql trong Laravel 5
Laravel
37
master slave
1
White

Bình Phạm viết ngày 13/03/2019

Tiếp tục câu chuyện của anh Nguyễn Văn A ở bài trước

Đọc thêm Phần 1

Hồi 4. Sử dụng thực tế với laravel.

Demo thì xong rồi, giờ thì phải áp dụng được vào thực tế. Anh A quyết định deploy một project laravel (5.5) và connect vào database cart mà anh đã tạo ở hồi 3.
Lại tiếp tục lần mò internet, anh thấy rằng laravel hỗ trợ readwrite tại 2 database khác nhau. Cách cấu hình thì cực kỳ đơn giản.
Chi tiết bạn có thể xem tại: https://laravel.com/docs/5.5/database#read-and-write-connections

"Thật là quá tuyệt vời đi" - anh A kêu lên sung sướng.

Anh A bắt đầu việc cấu hình cho dự án laravel của mình.
Ý tưởng của anh rằng, database master sẽ chỉ sử dụng để write, trong khi database slave sẽ chỉ sử dụng để read, source code laravel của anh sẽ để trên Server 1 (nơi cùng chưa database master).

Các bước cấu hình cho dự án laravel được anh A thực hiện như sau:

Tạo một tài khoản trên server slave

mysql> CREATE USER 'nguyenvana'@'%' IDENTIFIED BY 'password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'nguyenvana'@'%' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

Bằng cách chạy các lệnh trên, anh A đã tạo ra một user có tên là nguyenvana, mật khẩu là password

Mở file config/database.php, tìm đến đoạn config kết nối với mysql, anh A sửa thành

'mysql' => [
    'driver' => 'mysql',

    # Write trên database master
    # Vì database master và source code trên cùng 1 Server
    # nên anh A giữ nguyên tài khoản kết nối đến mysql ban đầu
    'write' => [
        'host' => env('DB_HOST', '127.0.0.1'),
        'port' => env('DB_PORT', '3306'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', ''),
    ],

    # Read trên database slave
    # Vì database slave và source code nằm tại 2 server khác nhau
    # nên anh A phải sử dụng tài khoản slave vừa tạo ở đây
    'read' => [
        'host' => env('DB_READ_HOST'), # 192.168.10.17
        'port' => env('DB_READ_PORT', '3306'),
        'username' => env('DB_READ_USERNAME', 'forge'), # nguyenvana
        'password' => env('DB_READ_PASSWORD', ''), # password
    ],

    # Vì tại 2 server master và slave, tên database đều là `cart`
    # Vậy nên anh A giữ nguyên thông tin cấu hình này
    # không đưa vào 2 thông tin cầu hình `read` và `write
    'database' => env('DB_DATABASE', 'forge'),

    'unix_socket' => env('DB_SOCKET', ''),
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
],

Kiểm tra đảm bảo laravel đã writeread trên server master và slave tương ứng.

// Create là hành động write, vậy sẽ xảy ra trên db master
$productOnMaster = Product::create([
    'title' => 'Đây là sản phẩm test'
]);

// Find là hành động read, vậy sẽ xảy ra trên db slave
$productOnSlave = Product::find($productOnMaster->id);

// Nếu lấy được dữ liệu trên slave
// và ID của product trên slave == ID của product trên master
if ($productOnSlave && $productOnSlave->id == $productOnMaster->id) {
    echo "It work";
} else {
    echo "Fails";
}

Lời kết

Bài viết trên được viết dựa trên kinh nghiệm tìm hiểu mày mò của anh Nguyễn Văn A sau 4 ngày tìm hiểu. Nếu có vấn đề gì sai sót, rất mong nhận được góp ý đến từ các bạn. Sau khi nhận được góp ý, mình sẽ báo với anh A ngay.

Cảm ơn tất cả các bạn.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Bình Phạm

4 bài viết.
15 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
9 1
Dưới đây câu chuyện của anh Nguyễn Văn A trên con đường đi tìm cách tăng hiệu năng cho hệ thông tuyển dụng của công ty anh đang làm việc. Câu chuyể...
Bình Phạm viết 5 tháng trước
9 1
White
5 4
Chào các bạn, Như bạn đã biết thì công nghệ đang thay đổi một cách chóng mặt, cứ vài bữa là lại có một framework mới hoặc một ngôn ngữ lập trình...
Bình Phạm viết 9 ngày trước
5 4
White
4 4
Chào các bạn, Con người chúng ta sinh đã luôn thích cái đẹp: người đẹp, tâm hồn đẹp, nhà đẹp, xe đẹp, quần áo đẹp và... Code đẹp một quan niệm về ...
Bình Phạm viết 23 ngày trước
4 4
Bài viết liên quan
White
4 2
Bash script to fast serve Laravel project Lười gõ dòng lệnh quá nên tạo ra cái script để gõ nhanh :D laravelstart.sh /bin/bash if z "$1" ] ...
Vũ Hoàng Chung viết hơn 2 năm trước
4 2
White
0 0
1 Đặt vấn đề Chẳng hạn bây giờ bạn có 1 chuỗi các action diễn ra lần lượt và phụ thuộc vào nhau tạo accountgửi mail cho user, bạn sẽ viết code như...
Kaopiz Software Co., Ltd. viết 7 tháng trước
0 0
White
4 2
Trong đợt vừa rồi, mình có cần tìm một framework NodeJS cho dự án. Sau một vòng tìm hiểu mình đã tìm thấy Adonis, một framework NodeJS hoàn thiện đ...
Kaopiz Software Co., Ltd. viết 5 tháng trước
4 2
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
4 bài viết.
15 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!