Kết nối MySQL không hoạt động nữa


7

Tôi đã có hai máy chủ MySQL đang chạy (127.0.0.1:3306 và 127.0.0.1:3307). Bây giờ tôi gặp lỗi lạ này: mysql_connect(): Lost connection to MySQL server at 'reading initial communication packet'tôi có thể kết nối với localhost:3307, nhưng không có bảng / cơ sở dữ liệu nào. Tôi khá chắc chắn /etc/my.cnflà đúng:

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = root
password   = ***

[mysqld]
port       = 3306
socket   = /var/run/mysql/mysql.sock

[mysqld2]
port       = 3307
socket   = /var/run/mysql/mysql2.sock

Tôi có thể làm gì bây giờ? Làm thế nào tôi có thể hoàn toàn khởi động lại máy chủ MySQL?

Có lẽ quan trọng hơn:

Làm thế nào tôi có thể chắc chắn rằng tất cả các bảng vẫn tồn tại?


Bạn có thể kết nối với localhost: 3307 ở đâu? Trong một ứng dụng php?
jcolebrand

Câu trả lời:


4

Đây là một điều tôi nhanh chóng thấy thiếu: Mỗi [mysqld] cần phải có datadir riêng . Không có hai nhóm mysqld có thể chia sẻ cùng một datadir. Bạn cần phân bổ các datadir khác nhau trong các thư mục khác nhau và đảm bảo bạn chạy "chown -R mysql: mysql (thư mục datadir)" trên tất cả các datadir.

/Etc/my.cnf của bạn sẽ trông giống như thế này:

[mysqld_multi]
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = root
password   = ***

[mysqld]
port       = 3306
datadir  = /var/lib/mysql1
socket   = /var/run/mysql/mysql.sock

[mysqld2]
port       = 3307
datadir  = /var/lib/mysql2
socket   = /var/run/mysql/mysql2.sock

Kiểm tra liên kết này từ Nhóm Pythian về cách bắt đầu và dừng các dịch vụ DB riêng lẻ .

Từ câu trả lời của tôi, bạn sẽ thấy rằng phải có một bản sao hoàn chỉnh của dữ liệu trong / var / lib / mysql1, / var / lib / mysql2, v.v.


3

Đây là cách tôi chạy multis:

  1. Tạo một "my.cnf" cho mỗi phiên bản của mysql chỉ định cổng và ổ cắm của bạn. ví dụ: cảng 3307

    [mysqld]

    cổng = 3307

    ổ cắm = /opt/db/3307/mysql.sock

    datadir = / opt / db / 3307

    tmpdir = / opt / tmp / 3307

    ...

  2. Bắt đầu mỗi trường hợp bằng cách sử dụng tệp bao gồm riêng của nó.

ví dụ

/usr/bin/mysqld_safe --defaults-file=/etc/my_3306.cnf
/usr/bin/mysqld_safe --defaults-file=/etc/my_3307.cnf
/usr/bin/mysqld_safe --defaults-file=/etc/my_3308.cnf

Bằng cách này tôi có thể kiểm soát từng trường hợp cá nhân.


Tôi đã thử nghiệm với chỉ portdatadirvà họ dường như làm việc tốt. Là thiết lập sockettmpdiryêu cầu?
Pacerier

Theo kinh nghiệm của tôi, ổ cắm là bắt buộc. Tuy nhiên, bạn nên tách biệt mọi thứ để có thể theo dõi các vấn đề.
Randomx
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.