mysqladmin -uroot create foo
trả về trạng thái thoát là 1 nếu foo
tồ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?
mysqladmin -uroot create foo
trả về trạng thái thoát là 1 nếu foo
tồ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:
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ộ.
mysql -e "SHOW DATABASES LIKE 'foo'"
sẽ giúp bạn
mysql --batch --skip-column-names -e "SHOW DATABASES LIKE 'foo'" | grep foo
.
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/lib
là 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 đó.
Từ http://www.jbmurphy.com/2011/02/08/quick-check-if-a-mysql-database-exists/ điều này gần giống với những gì tôi muốn:
DBNAME="dblookingfor"
DBEXISTS=$(mysql --batch --skip-column-names -e "SHOW DATABASES LIKE '"$DBNAME"';" | grep "$DBNAME" > /dev/null; echo "$?")
if [ $DBEXISTS -eq 0 ];then
echo "A database with the name $DBNAME already exists."
else
echo " database $DBNAME does not exist."
fi
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à exit
ngay 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/null
nế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.