Съдържание
Извеждане на бази данни
Изхвърляне на база данни
Изхвърляне на всички бази данни
Изхвърляне на Grants
Изтриване или премахване на база данни
Изтриване на Grant
Възстановяване на база данни
Възстановяване на Grant
PostgreSQL е отлична алтернативна машина за бази данни на MySQL или MariaDB, но управлението на тези бази данни е много различно, особено за онези системни администратори, които са много свикнали да използват MySQL от командния ред или PHPMyAdmin. Много CMS и приложения вече знаят как да взаимодействат с PostgreSQL бази данни от кутията, но подобно на MySQL, все още зависят от вас, за да поддържате тези бази данни.
За тази статия ще приемем, че сте въведени чрез SSH във вашия сървър като „root“ потребител и сте инсталирали PostgreSQL сървър с конфигурацията по подразбиране, която изисква свързване като потребител на „postgres“. Следователно повечето команди ще приемат и опцията -U postgres. Тези команди като цяло ще бъдат идентични между CentOS и Ubuntu в повечето модерни версии, но са тествани предимно на CentOS 7 VPS сървър и сървър на Ubuntu 16.04, работещ с PostgreSQL 9.2.
Създаването на бази данни и грантове е доста сложно, но ако използвате cPanel, Plesk или друг контролен панел, който поддържа интеграция с PostgreSQL, настройката е лесна. Създаването на тези бази данни и безвъзмездни средства от командния ред е извън обхвата на тази конкретна статия, така че също така ще приемем, че вече имате стартирани и използвани бази данни.
Списък на бази данни в PostgreSQL
Помага да знаете точните имена на базите данни, върху които ще работите, както и да направите двойна проверка, за да сте сигурни, че работите на правилния сървър. Нека първо изброим PostgreSQL бази данни на нашата машина:psql -l -U postgres
Резултатът за тази команда е таблица с имена на бази данни, собственици и привилегии за достъп. Ще използваме данни от първата колона, когато описваме имена на бази данни за бъдещи команди. За тази статия ще използваме база данни, наречена „име_на_база данни “.
Ако имате нужда само от имена на бази данни, а не друга информация, можете да отрежете излишната информация, като изпълните точна заявка за имена на база данни:psql -U postgres -tA -c 'select datname from pg_database;'
Тази команда изпълнява команда (описана с -c флаг) за избор на име на данни колона на pg_database глобална таблица. -t флагът изброява само кортежи (редове с резултати) и скрива излишните дескриптори като заглавката и броя на резултатите и -A флагът ще премахне подравняването, отпечатвайки една база данни на ред без знаци пред или зад имената. Резултатът от тази команда е особено полезен за създаване на цикли за дъмпове на база данни.
Изхвърлете база данни
Командата dump ще вземе пълно копие на база данни, включително всички таблици, схеми и данни, и ще я съхрани в един компресиран файл:pg_dump -c -Fc -U postgres database_name > database_name.psql
Има няколко важни флага за тази команда. -c , или – чисти , казва на pg_dump за добавяне на оператори DROP към изхода и -Fc , или –format=custom , компресира и организира изхода, който да се използва с pg_restore по-късно. Персонализираният формат има най-голяма гъвкавост и изгодно съхранява резервното копие в един файл.
Изхвърлете всички бази данни
Вероятно би било по-добре да изведете всяка от базите данни в собствен файл, като изпълните горната команда няколко пъти. Ще се позоваваме на втората ни команда за листване, извличайки няколко ненужни бази данни, за да направим нашите индивидуални дъмпи.for db in $(psql -U postgres -tA -c 'select datname from pg_database;' | grep -E -v “^(template1|template0|postgres)$”); do
echo $db
pg_dump -c -Fc -U postgres $db > $db.psql
done
Този цикъл for ще предаде списък с всички бази данни, различни от шаблоните по подразбиране и базата данни postgres, вpg_dump команда за създаване на .psql файл за всеки в текущата директория.
Забележка:Възможно е също да се извърши изхвърляне на всички бази данни в един файл, въпреки че при големи набори от данни това може да стане тромаво и трудно за възстановяване. Затова не препоръчвам този метод, въпреки че е по-малко сложен и може да работи в някои ситуации.
pg_dumpall --clean -U postgres > pg.all.psql
Изхвърляне на безвъзмездни средства
Грантовете се съхраняват в схемата на PostgreSQL. Можете да изхвърлите схемата, като по този начин получите всички налични разрешения за системата, като използвате командата pg_dump:pg_dumpall -U postgres -s > pg.schema.psql
Това ще изхвърли не само грантовете, но и останалата част от схемата на сървъра, включително изрази за създаване на база данни и таблици, собственост и членство в ролята и разпределение на ACL – по принцип всичко освен данните.
Ако имате нужда само от потребители (роли) и грантове, можете да ги съберете, като използвате тази команда:pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' -e '^(CREATE|ALTER)\ ROLE' > pg.grants.psql
Това използва пълния дъмп на схемата, но приема само операторите за създаване на роля и операторите за предоставяне/отмяна за събиране на потребители и разрешения.
Изтриване или изтриване на база данни
За унищожаване на база данни синтаксисът е много ясен. Моля, бъдете внимателни, когато пишете тази команда, тъй като тя не изисква от вас да потвърдите!psql -U postgres -c ‘drop database database_name’
Ако базата данни съществува, вече няма. Също така има обвивка на командния ред за същата задача:dropdb -U postgres database_name
Изтриване на грант
Безвъзмездните средства се премахват от потребителите, като се отменят. Важно е първо да знаем какви разрешения има конкретен потребител, така че нека да ги потърсим, като изхвърлим схемата и намерим редове, свързани с нашия потребител.pg_dumpall -U postgres -s | egrep -e '^(REVOKE|GRANT)' | grep database_user
В моя случай има разрешение, което изглежда по следния начин:GRANT ALL ON DATABASE database_name TO database_user;
За да се борим с това, ние ще отменим същия дескриптор:psql -U postgres -c ‘revoke all on database database_name from database_user;’
Забележка:Обърнете внимание на леките промени, GRANT е променен на REVOKE, а TO е променен на FROM. Тази команда е обвита в единични кавички и се предава на psql с флага -c, за да изпълни командата в PostgreSQL.
Това ще замени оригиналния оператор GRANT с REVOKE в схемата. Изпълнението на първата команда в този раздел отново показва само реда, който току-що минахме:REVOKE ALL ON DATABASE database_name FROM database_user;
Възстановяване на база данни
За бази данни, които са били изхвърлени с помощта на метода pg_dump, използван в тази статия, можем да възстановим цялата база данни с помощта на тази команда:pg_restore -U postgres -c -C -O -d database_name database_name.psql
Тук са необходими още доста знамена! -c или – чисти , както и преди, пуска обекти на база данни, преди да запише от файла в PostgreSQL. Добавяме това само в случай, че не е използвано за командата dump. -C , или –създайте , ще направи базата данни database_name по време на възстановяване, ако тя не съществува. Ако базата данни вече съществува, -c флагът ще го унищожи преди -C го пресъздава. Следва -O , или –без собственик , което премахва собственика от базата данни. Това позволява резервно копие от всеки източник да бъде променено на собственика на потребителя, извършващ възстановяването, което в нашия случай е postgres. -d име_на_база_данни описва името на базата данни, към която ще възстановите. Това може да е различно от това, от което е създадено резервното копие, ако е необходимо. Последният аргумент е името на нашия архивен файл, database_name.psql .
Възстановяване на грант
Тъй като всички грантове се съхраняват в нашия pg.grants.psql файл, трябва да изберем само потребителя, който трябва да възстановим. В нашия случай ще възстановим базата_потребител:grep database_user pg.grants.psql | psql -U postgres
Тъй като файлът pg.grants.psql има роли и разрешения, тази команда ще пресъздаде потребителя с оригиналните му привилегии и парола и след това ще му предостави достъп до необходимите бази данни и схеми.