Database
- Oracle
- MYSQL
- PB SQL FAILOVER
- Commandes General
- Dump/Restore
- Mysql innodb cache info
- Modification du compte mysql_monitor
- POSTGRES
- TimescaleDB Update
- Création user en lecture seul
- Modification du compte Monitor
- Vacuum
- Splitbrain
- Commande Postgresql
- SQLPLUS
- Notes Général
Oracle
Acces base oracle
Sudo su - oracle
Setup l'affichage et voir les session connecte à la basse :
SET pages 400 lines 200
COLUMN spid FORMAT A10
COLUMN username FORMAT A20
COLUMN program FORMAT A45
SELECT s.inst_id,
s.sid,
s.serial#,
p.spid,
s.username,
s.program
FROM gv$session s
JOIN gv$process p ON p.addr = s.paddr AND p.inst_id = s.inst_id
WHERE s.type != 'BACKGROUND';
Générer le path et sid
export PATH=$PATH:/app/oracle/product/11.2.0.4/dbhome_1/bin/
export ORACLE_SID=Nom database
export ORACLE_HOME=/app/oracle/product/11.2.0.4/dbhome_1/
. oraenv mettre le sid et path en rapport
sqlplus / as sysdba
drop user TABLE cascade;
Vérifier et débloquer un compte verrouillé
export ORACLE_HOME=/u01/app/oracle/product/11gr2/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=gcldev
sqlplus /nolog
connect / as sysdba
SELECT username, account_status FROM dba_users;
SELECT username, account_status, created, lock_date, expiry_date FROM dba_users WHERE account_status != 'OPEN';
ALTER USER nomducompte ACCOUNT UNLOCK;
ALTER USER nomducompte BY new_password;
Problème demarrage timezone
ps -ef | grep pmon
Pour redémarrer les bases manuellement :
export ORACLE_HOME=/app/oracle/product/10.2.0.5SE/dbhome_1
export ORACLE_BASE=/app/oracle/product/10.2.0.5SE/dbhome_1
export ORACLE_SID=PIMS1
sqlplus / as sysdba
Démarrer la base
startup
Pour arrêter la base:
shutdown immediate
============================================================================
Lorsque l'on exécute la commande (sqlplus / as sysdba) surtout sur la base l'on obtient le message d'erreur suivant :
ORA-01804: failure to initialize timezone information
Solution :
Prendre un autre fichier timezone sur n'importe quel répertoire :
export ORA_TZFILE=/app/oracle/product/11.2.0.4/dbhome_1/oracore/zoneinfo/timezlrg_14.dat
============================================================================
Pour supprimer les logs de listener de plus de Xjour (exemple +24)
cd /app/oracle/diag/tnslsnr/prdoran1/listener/alert
find . -name "log_*.xml" -ctime +24 -exec rm -f {} \;
Pour lister les traces +15 j :
find . -name "*.trc" -ctime +15 -exec ls -l {} \;
Avant de remplacer "ls -l" par "rm -f" assure toi que la base est démarrée depuis plus de 15 j
============================================================================
Il existe des bases selon la version d'oracle, pour les lister :
cd /app/oracle/product/
Ensuite la version ex :
cd /app/oracle/product/11.2.0.4/dbhome_1/dbs/
Ce qui nous intéresse c'est le init* pour savoir le nom de la base (ex: la base initNODHOS1.ora ça représente la base NODHOS1 donc pour l'utiliser on doit lancer l'export :
export ORACLE_HOME=/app/oracle/product/11.2.0.4/dbhome_1
ensuite :
export ORACLE_SID=NODHOS1
Après on va pouvoir lancer sqlplus en tant que NODHOS1 et démarrer la base
MYSQL
PB SQL FAILOVER
Clic droit --> Failover…
Next
Finish
Vérifier que le 1 est bien passé en Primary ainsi que le 2 en Secondary
Commandes General
Poids base de doonnées
SELECT sum( data_length + index_length) / 1024 / 1024 "Nom-de-la-base Taille en Mo" FROM information_schema.TABLES WHERE table_schema = "nom-de-base" GROUP BY table_schema;
Read permission
GRANTSELECTON DBNAME.TABLE_NAME TO USERNAME
liste toutes les BDD
show databases;
se met sur la BDD qui nous intéresse
Use nomdelabdd;
Suppression de la BDD
Drop database nomdelabdd;
Création de la BDD
Create database nomdelabdd;
Dans le cas où le compte mysqldump n'a pas les droits de restauration de dump
grant all privileges on *.* to mysqldump@localhost;
Restauration du dump dans la BDD
mysql -u mysqldump -p "nomdelabdd" < "/production/mysql_dump/nomdelabdd.sql"
Vérification de la bonne restauration du dump
ls -alsh /production/mysql/nomdelabdd/
Pour se connecter
mysql
Pour avoir la taille de toutes les BDD:
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES GROUP BY table_schema;
Pour avoir la taille de toutes les tables d'une BDD:
SELECT table_name AS "Table", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "database_name" ORDER BY (data_length + index_length) DESC;
Reset Mot de passe Mysql:
ALTER USER 'mysqldump'@'localhost' IDENTIFIED BY 'dump';
Dump/Restore
Création de dump Mysql:
/usr/bin/mysqldump -u mysqldump -p name | gzip -c --best > /production/mysql_dump/Save_25.sql.gz
Dezip d'un dump au format sql.gz :
gunzip /production/mysql_dump/Save_25.sql.gz /tmp
Attention cela remplace le fichier d'origine en .sql
Affichage de tous les droits sur une BDD:
Use name;
SELECT host,user,password,Grant_priv,Super_priv FROM mysql.user;
Restauration d'un dump Mysql avec le dump au format .sql :
show databases; --> liste toutes les BDD
Use nomdelabdd; --> On se met sur la BDD qui nous intéresse
Drop database nomdelabdd; --> Suppression de la BDD actuelle
Create database nomdelabdd; --> Création de la BDD
grant all privileges on *.* to mysqldump@localhost; --> Dans le cas où le compte mysqldump n'a pas les droits de restauration de dump
mysql -u mysqldump -p nomdelabdd < /production/mysql_dump/nomdelabdd.sql --> Restauration du dump dans la BDD nouvellement créée
ls -alsh /production/mysql/nomdelabdd/ --> Vérification de la bonne restauration du dump, voir s'il y a des éléments récents
Pour info, utiliser la commande pv lors de la restauration d'un dump afin de voir en live ce que fait la restauration:
Mysql innodb cache info
Vérifier taille Buffer Pool Size:
mysql
SELECT FORMAT (BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM (SELECT variable_value BufferPoolPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_total') A, (SELECT variable_value PageSize FROM information_schema.global_status WHERE variable_name ='Innodb_page_size') B;
Vérifier données en cache:
Mysql
SELECT FORMAT (BufferPoolPages*PageSize/POWER(1024,3),2) BufferPoolDataGB FROM (SELECT variable_value BufferPoolPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_data') A, (SELECT variable_value PageSize FROM information_schema.global_status WHERE variable_name ='Innodb_page_size') B;
Vérifier % d'utilisation en cache:
SELECT CONCAT (FORMAT (DataPages*100.0/TotalPages,2),' %') BufferPoolDataPercentage FROM (SELECT variable_value DataPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_data') A, (SELECT variable_value TotalPages FROM information_schema.global_status WHERE variable_name ='Innodb_buffer_pool_pages_total') B;
Données supplémentaires sur le cache:
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool%';
Statut Innodb:
SHOW ENGINE INNODB STATUS;
Buffer hit ratio:
SELECT round ((P2.variable_value /P1.variable_value),4), P2.variable_value, P1.variable_value FROM information_schema.GLOBAL_STATUS P1, information_schema.GLOBAL_STATUS P2 WHERE P1. variable_name ='innodb_buffer_pool_read_requests'ANDP2. variable_name ='innodb_buffer_pool_reads';
Modification du compte mysql_monitor
mysql
SHOW DATABASES;
select user, host from mysql.users;
UPDATE user SET password=PASSWORD('PASSWORD') WHERE user='mysql_monitor';
si la commande ci-dessous ne fonctionne pas
ALTER USER 'mysql_monitor' IDENTIFIED BY '************';
FLUSH PRIVILEGES;
POSTGRES
TimescaleDB Update
Création user en lecture seul
sudo -u postgres -i
CREATE USER servicenav LOGIN PASSWORD 'Password';
GRANT CONNECT ON DATABASE contact TO servicenav;
GRANT CONNECT ON DATABASE side TO servicenav;
GRANT CONNECT ON DATABASE vac TO servicenav;
GRANT USAGE ON SCHEMA public TO servicenav;
GRANT SELECT ON ALL TABLES IN schema public TO servicenav;
Modification du compte Monitor
sudo -u postgres -i
cd /production/pgsql/data/
Modification :
vim /production/pgsql/data/pg_hba.conf
#host all monitor 10.0.0.0/8 password
host all monitor 10.1.1.85/32 password
Modification mot de passe compte postgresql monitor :
psql test
test=# \du
List of roles
Role name | Attributes | Member of
--------------+------------------------------------------------------------+-----------
test | | {}
monitor | Superuser | {}
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
postgresdump | Superuser | {}
ALTER USER monitor WITH PASSWORD 'password';
systemctl reload postgresql-12
Nb : pour avoir le nom exact du service : systemctl --type=service | grep postgre
Vacuum
Splitbrain
Reconstruction du cluster Postgresql sous Centos
Premièrement sauvegarder la VM via un quick backup du côté du serveur VEEAM ou autre
Deuxièmement : vérifier qu'il n'existe pas de job de dump sql sur les serveurs membres du cluster
UNIQUEMENT QUAND CECI EST FAIT désactiver le service PostgreSQL sur le Node qui sera le slave/standby
Service postgres12 stop
Dans le cas où il risque d'y avoir des cron de sauvegarde ou autre désactiver aussi le service crond
Service crond stop
Puis, toujours sur le node standby lancez cette commande en se positionnant sur un dossier qui est "possédé" par le user qui a accès à la/aux base/s ici c'est postgres et on effectue à partir du dossier /production/pgsql
/usr/pgsql-12/bin/repmgr -h POSTGRESQL1.repli -U repmgr -d repmgr standby clone -F
Ici POSTGRESQL1 est le node master
Afin de forcer la synchronisation des données entre le nœud master et standby
Astuce : utilisez watch -n1 df -h côté nœud standby pour regarder l'évolution du remplissage du disque et pour vérifier qu'entre le nœud principal et secondaire une même quantité de données est utilisée.
Une fois cette opération qui peut prendre du temp est terminée
Relancer le service postgresql
Service postgresql12 start
Vérifier son état
Service postgresql12 status
Maintenant lancer cette commande sur le nœud qui est censé être le standby
repmgr standby register --force
Ensuite vérifier que les rôles sont de nouveau assignés normalement
repmgr cluster show --verbose
Astuce si vous avez dût fermer le service Cron pensez à le redémarrer
Service crond start
Vérifier
Service crond status
Et regarder si des jobs qui devaient se lancer n'ont pas été rater et dans le cas où si c'est le cas demander au client si vous pouvez les lancer ou bien vous le signaler au client pour qu'il fasse ses vérifications lui-même
Commande Postgresql
SQLPLUS
Notes Général
POUR SQLITE 3
Les commandes deletes s'executent sans * comme dans l'exemple suivant :
DELETE from users WHERE id IN (3, 9);