Từ tập lệnh shell, làm cách nào tôi có thể kiểm tra xem cơ sở dữ liệu MySQL có tồn tại không?


22

mysqladmin -uroot create footrả về trạng thái thoát là 1 nếu footồn tại và 0 nếu không, nhưng tất nhiên nó cũng sẽ tạo cơ sở dữ liệu nếu nó không tồn tại. Có một số cách dễ dàng để kiểm tra xem cơ sở dữ liệu có tồn tại không?

Câu trả lời:


42

Tôi nhận ra điều này đã được trả lời từ lâu, nhưng nó có vẻ sạch sẽ hơn nhiều đối với tôi để làm điều này:

mysql -u root -e 'use mydbname'

Nếu cơ sở dữ liệu tồn tại, điều này sẽ không tạo ra đầu ra và thoát với returncode == 0.

Nếu cơ sở dữ liệu không tồn tại, điều này sẽ tạo ra một thông báo lỗi trên stderr và thoát với returncode == 1. Vì vậy, bạn sẽ làm một cái gì đó như thế này:

if ! mysql -u root -e 'use mydbname'; then
  ...do stuff to create database...
fi

Điều này hoạt động độc đáo với các tập lệnh shell, không yêu cầu xử lý đầu ra và không phụ thuộc vào việc có quyền truy cập hệ thống tập tin cục bộ.


1
Đối với bất kỳ ai muốn loại bỏ thông báo lỗi, hãy thử điều này (tất nhiên, xem xét việc lấy mật khẩu của bạn ra để bảo mật): if! mysql -u <user> -p <pw> -e 'sử dụng <tên db>' 2> / dev / null; sau đó mysql -u <user> -p <pw> -e 'TẠO DỮ LIỆU <tên db>;'; fi
Peter Mark


7

Cơ sở dữ liệu trong MySQL là các thư mục trong hệ thống tập tin. Điều đó làm cho nó dễ dàng tìm thấy liệu một cơ sở dữ liệu tồn tại:

test -d "/var/lib/mysql/databasename"

Trong trường hợp này, /var/liblà datadir của MySQL. Điều thú vị về đoạn trích này là nó sẽ không cần một trình nền MySQL chạy, nó cũng không cần thông tin đăng nhập. Tất nhiên người dùng đang chạy lệnh phải được phép đi xuống thư mục đó.



2

Một chút hacky, nhưng điều này sẽ in 1 nếu foo không tồn tại, 0 nếu không:

mysqlshow -u root foo 2>&1 >/dev/null | awk ' { print /Unknown database/ }'

2

Tôi nghĩ bạn có thể kiểm tra xem cơ sở dữ liệu cần thiết của bạn có hoạt động theo cách đơn giản trong bất kỳ shell nào không

mysql -uUSERNAME -pPASSWORD DATABASE -e exit

và sau đó kiểm tra $?mã thoát

Lệnh này sẽ thử thông tin đăng nhập cụ thể của bạn (USERNAME và PASSWORD) để kết nối với DATABASE đã chọn và exitngay lập tức. Vì vậy, nếu kết nối là ok, mã thoát sẽ là 0 và khác không.

Tất nhiên, bạn có thể chuyển hướng bất kỳ đầu ra nào /dev/nullnếu cần

Tái bút Phương pháp này rất hữu ích để kiểm tra sức khỏe của các kho lưu trữ phù du rất nhanh và phổ biến ngày nay. Nếu cơ sở dữ liệu không thể được kết nối, bạn nên bắt đầu khôi phục càng sớm càng tốt.

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.