Nous activons des fonctionnalités supplémentaires de PhpMyAdmin. Activer des fonctionnalités supplémentaires de l'historique des requêtes PhpMyAdmin Mysql

Question : Historique des requêtes MS SQL


Comment consulter l'historique des demandes (suppression, mise à jour...) ?

Répondre:
le profileur est l'audit le plus lent auquel vous puissiez penser. Les événements étendus peuvent être personnalisés en fonction de vos besoins et peuvent également être téléchargés, etc., mais chacune de ces options nécessite des ressources.

Question : Historique d'exécution des requêtes


Dites-moi, est-il possible de voir quelque part dans MS SQL qui a effectué quelles requêtes dans une base de données spécifique ?

Répondre: iluxa1810, ces informations ne sont que partiellement disponibles. Essayez une requête comme :

Code T-SQL
1 2 3 4 SELECT deqs.last_execution_time AS [ Heure ], dest.TEXT AS [ Requête] FROM sys.dm_exec_query_stats AS deqs CROSS APPLY sys.dm_exec_sql_text (deqs.sql_handle) AS dest ORDER BY deqs.last_execution_time DESC

Pour un historique complet des requêtes, vous devez effectuer une journalisation ou utiliser des utilitaires tels que SQL Profiler.

Question : Requête SQL pour renvoyer les valeurs précédentes à la base de données


Salut tout le monde!

Veuillez me dire comment puis-je renvoyer l'avant-dernier statut de commande dans toutes les commandes à partir d'une certaine date dans la base de données ?

Peut-être qu'il y a une sorte de requête SQL ou peut-être une sorte de script... Je serais très reconnaissant.

Le programmeur a fait une légère erreur lors de l'intégration avec mon entrepôt et toutes les commandes ont changé leur statut pour celui qui était dans les paramètres du module d'intégration et ne sait pas comment le retourner.

Nous ne l’avons pas remarqué tout de suite et il était trop tard pour restaurer l’ancienne copie de la base de données. Il y a déjà de nouvelles commandes en magasin.

Répondre: Poétique,
InnoDB peut stocker l'historique des requêtes.

Frapper
1 ~/ .mysql_history

Effectuez la dernière sauvegarde et répétez les commandes
Bon, en général, avant chaque intégration il faut faire une sauvegarde, et mieux encore, la tester sur un serveur de test

Question : requête SQL pour effectuer une recherche à partir de plusieurs tables


Bon après-midi. S'il vous plaît, aidez-moi à comprendre si je peux le faire ou si la base de données doit être refaite ou si une telle recherche n'est pas possible à mettre en œuvre.
J'écris sur Delphi Rad Xe10.
J'écris dans le tableau Employés des informations sur l'employé sur une seule ligne, dans les tailles de vêtements il y a aussi une ligne et l'historique de ce qui lui a été donné (plusieurs lignes et la seule différence est ID_rab).

je veux faire une recherche
de sorte que lorsqu'on me demande mon nom de famille ou mon numéro d'onglet, il me donne les informations suivantes :
À propos du travailleur de la première table dans dbgrid1,
ses tailles de la deuxième table dans dbgrid2
et l'historique lié à cet employé du tableau 3 (il peut y avoir de nombreuses lignes qui ne diffèrent que par ID_rab) dans dbgrid3

Dans le premier tableau :

dans la seconde:

SQL
1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE Taille (ID_razmOdejdi INT NOT NULL IDENTITY (1, 1), Clothes VARCHAR (4), ID_rab INT, PRIMARY KEY (ID_razmOdejdi), FOREIGN KEY (ID_rab) REFERENCES Employés, ) ;

Dans le troisième:

SQL
1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE Historique ( ID_story INT NOT NULL IDENTITY (1, 1), Nim_means VARCHAR (15), ID_rab INT, PRIMARY KEY (ID_story), FOREIGN KEY (ID_rab) REFERENCES Employés, ) ;

Créer 3 ADOQuery avec différentes requêtes à la fois ?
Je ne sais pas comment faire afficher les informations d'une autre table appartenant à la première
Si cela était possible : j'entrais une personne dans la recherche, elle la trouverait et, en utilisant son ID_rab, elle trouverait des informations dans d'autres tables et en même temps les afficherait dans 3 dbgrids différentes.

Répondre:

message de Rogzar

Et si vous supprimez complètement toutes les informations sur un employé, sa taille, son historique, selon les besoins, cela peut-il se faire en une seule demande ?

Si vous activez la suppression en cascade sur la table Employés, la suppression d'une ligne dans celle-ci supprimera les données des tables subordonnées. Sinon vous devrez faire plusieurs requêtes DELETE.

Ajouté après 14 heures 31 minutes
Un tel code est vulnérable aux attaques appelées. Des requêtes avec des paramètres doivent être utilisées.

Question : Une seule demande – est-ce possible ?


Bonjour, mesdames et messieurs!
Dites-moi comment résoudre rationnellement le problème suivant...
Il y a trois tableaux : les produits (ils sont vraiment peu nombreux, environ 60-80 pièces), l'historique des ventes et les soldes...

DANS simplifié la structure est la suivante :
marchandises:
identifiant
nom

Historique des commandes:
identifiant
s_date
bon_id
prix

équilibre:
identifiant
s_date
numéro de commande
compter

Les trois tables sont liées par ID (goods.id - order_history.good_id, order_history.id - balance.order_id).
La tâche est d'obtenir le solde total de toutes les marchandises pour n'importe quelle date arbitraire ! Autrement dit, pour chaque produit, je dois obtenir la date la plus proche du bilan et de l'historique des ventes (du bilan, respectivement, la quantité, de l'historique des ventes - le prix).

Il est clair que vous pouvez parcourir tous les produits par ID et exécuter une requête SQL à chaque itération, mais d'une manière ou d'une autre... Je n'aime pas cette option ! :) Est-il possible de résoudre le problème avec élégance - avec une seule demande ?

Je serais reconnaissant pour toutes les idées!

Répondre: Je ne vois aucune contre-indication. Si vous mettez la structure en ordre.

Émoussé!
Ajout d'une certaine redondance à la base de données
Vous en avez déjà trop. De plus, c’est potentiellement contradictoire. Je ne vois aucune restriction qui pourrait m'interdire de faire une nouvelle entrée en solde telle que la différence entre celle-ci et la précédente entrée en quantité ne correspondra pas à la quantité totale de order_history pour la même période.

Question : Requête imbriquée, aidez-moi à en combiner plusieurs simples


Bon après-midi Je serai très reconnaissant pour votre aide)) Je me creuse la tête depuis longtemps.
Un peu d'histoire. Il existe un certain pool de requêtes avec une URL qui leur est associée, le but est d'émettre des requêtes croisées pour une certaine liste d'URL, qui est également déterminée par la requête

Il y a donc plusieurs requêtes qui sont exécutées dans l'ordre :
$sql2 = SELECT url FROM list WHERE `group` = "1" AND `proekt`= "1" GROUP BY url ORDER BY COUNT(*) DESC LIMIT 3 - capture d'écran
Je sélectionne une liste d'URL au nombre de 3 éléments, puis je les rassemble dans une vue pour la demande

$retour=tableau();
$maxcount=mysql_query($sql2);
while($url = mysql_fetch_array($maxcount)) (
$retour = $url ;
}
foreach ($return as $url1) ( //collecte une chaîne d'URL pour Muscle à partir d'un tableau
if ($frag2==0) ( $urls = "`url`="."".$url1."""; $frag2=1; ) else $urls .= " OU `url` = "". $ URL1.""";
}

Dans ce cas, $urls = `url` = "http://www.MosDance.com/" OU `url`="http://raisky.com/" etc.

J'affiche une liste de clés liées à ces URL
sélectionnez `key` dans (SELECT `key` , COUNT(*) AS total FROM list WHERE `group` = "1" AND `proekt`= "1" AND (".$urls.") GROUP BY `key` ORDER PAR `total` DESC) comme t2 OÙ t2.total >=3

En fait, la principale question est de savoir comment réduire ce problème ? Comment assembler correctement l'URL, afin de pouvoir vous débarrasser du script de béquille php qui collecte l'URL dans l'ordre requis et tout faire, par exemple, avec une seule requête dans la base de données ? en général, comment puis-je obtenir le résultat final d'une requête plus intelligente que mes béquilles ?

Répondre:

Bonne journée!
N'écrivez jamais COUNT(*). Une meilleure option serait COUNT(`id`).
N'écrivez pas non plus RAND(*). Il vaut mieux l’écrire différemment, bien sûr : les commentaires ont des fonctions, et c’est le cas.
Toutes les méthodes ci-dessus pour sélectionner des enregistrements dans la base de données chargent fortement le serveur MySQL. À moins, bien sûr, que vous ayez 30 000 enregistrements dans la base de données, ce ne sera pas si pénible.

Concernant la demande :
Creusez vers INNER JOIN. Ou envoyez-moi un dump de votre table, je vous aiderai si vous me dites le problème plus en détail, car ce que j'ai lu est trop paresseux pour approfondir toute cette histoire =)

-----
- cours de programmation ici. Des fonctionnalités intéressantes là aussi =)

Question : Requête à partir de deux tables en utilisant plusieurs critères


Bonne soirée!

Merci de m'aider à faire la demande suivante :
1. Il existe un tableau des transactions avec des champs : nom de la devise, date, type de taux de change et autres champs
2. Il existe un tableau avec l'historique des taux de change avec des champs : nom de la devise, date, type de taux de change, taux de change.

La demande doit être générée en fonction de tous les champs et enregistrements de la première table, ainsi que du taux de change de la deuxième table. De plus, il doit y avoir une coïncidence des 3 critères de sélection : nom de la devise, date et type de taux de change.

Merci d'avance!

Répondre:
Vous serez plus à l’aise dans le concepteur de requêtes.

J'ai compris comment créer de la joie intérieure via SQL, à première vue c'est simple. Mais il y a une question :
1. Dans le tableau des transactions il y a un champ "Type de transaction"
2. La requête que je fais extrait d'abord pour chaque entrée de table les transactions « Type de taux de change » de la table « Types de transactions ».
3. La demande est extraite du tableau des cours selon le critère « Type de cours » obtenu à l'étape 2.

Autrement dit : d'abord, 2 tableaux sont regroupés (transactions et types de transactions), puis, à l'aide d'informations générales, les données du tableau « Taux de change » y sont ajoutées.

Question : Découvrez sur quel enregistrement de table la requête échoue avec une erreur


Je suis tombé sur une situation où une requête sur une table de faits renvoie une erreur, mais je ne parviens pas à détecter les entrées dans le répertoire qui conduisent à une erreur (la question concerne les dates).
La requête elle-même renvoie tous les enregistrements de la table de faits, ainsi qu'un champ calculé du répertoire. Si le répertoire était correctement rempli, la sous-requête renverrait une valeur par enregistrement de la table de faits. Mais en fait, il y a des erreurs dans les entrées du répertoire que je n'arrive pas à détecter.
Est-il possible de voir d'une manière ou d'une autre quel enregistrement de la table de faits est à l'origine de l'erreur ?

Répondre: Pas drôle. Car cela fait longtemps (littéralement) :
Eh bien, dès que le détecteur d'illusions s'est déclenché, il a immédiatement couru... Qu'est-ce qui ne va pas ?
Avant d'écrire héroïquement des super-requêtes (pour toutes les occasions), vous devez allumer votre cerveau - enfin, au moins pendant quelques minutes...
Eh bien, personnellement, votre « souffrance » a suffi à une demande folle dont la place est la poubelle.
Et vous avez une « pantoufle » uniquement pour sa sémantique et sa syntaxe...
Bonne idée!
Et dès que vous le lavez, retirez-le du commerce (enfin, au moins !) - et « étudiez, étudiez et étudiez » (c). Il y a certainement quelque chose dans le partage de GROUP BY et d'HAVING...

Question : Programmes de profilage de requêtes


Salutations!

Dites-moi qui utilise quoi (programmes, IDE, etc.) pour analyser les requêtes ; je suis particulièrement intéressé par les outils d'analyse des requêtes pour leur optimisation. Où vous pouvez voir le plan de requête : index de requête, analyse complète, etc.

11) | DATE | DATE | nom_pilote | VARCHAR(100) | pour cent | INT(11) | sum_recieved_from_client | DÉCIMAL (9 , 2 ) | sum_tariff_for_driver | DÉCIMAL (9 , 2 ) | summa_for_paid | DÉCIMAL (9 , 2 ) | statut_payé | minusculeint(1) | percent_company | INT(11)

Le champ "paid_status" stocke le statut du paiement. Nécessaire dans une requête telle que :

obtenir toutes les données. Cela devrait être comme ceci : si «paid_status = 1», alors au lieu du numéro qui se trouve dans le champ «summa_for_payed», vous recevrez toujours «0».

Si j'ajoute "etpaid_status pas comme" 1 "" à la demande, il s'avère que la sortie de cette ligne ne sera pas reçue du tout, mais je dois tout obtenir, uniquement avec le champ "summa_for_payed" déjà modifié en fonction de l'état de « paid_status »

Ajouté après 25 minutes
J'ajoute qu'il faut aussi que lors d'une requête avec la commande sum(summa_for_payed) pour une certaine date, récupère le montant en tenant compte de la valeur du champ «paid_status», ou plutôt celui où «paid_status = 1 ", alors les champs "summa_for_payed" sont considérés dans le montant comme "0" si "paid_status = 1"

Répondre: Oui, je le pensais, mais le problème est le suivant : si je réinitialise la ligne, et si du coup le mauvais utilisateur a été sélectionné par erreur, alors je ne pourrai pas le restituer, puisque son ancienne dette a été effacée, donc je pensé simplement à utiliser cet indicateur et à déterminer le paiement, et si nécessaire, à le restituer, en voyant le montant de sa dette. Eh bien, en général, il vaudrait mieux que l'histoire voie sa dette, qu'il a remboursée.

Ajouté après 34 minutes
Chers gourous.
J'ai trouvé quelque chose qui peut être fait comme ça

SQL
1 SELECT SUM (IF (`paid_status` = 1 , 0 , `summa_for_payed` ) ) FROM ma table

J'ai fait plusieurs demandes, cela semble être ce dont j'ai besoin, mais pouvez-vous me dire s'il y a des écueils dans une telle demande, est-ce ce dont j'ai besoin ? Dois-je procéder ainsi ou chercher d'autres solutions ? Les déclencheurs me viennent également à l’esprit. peut-être quelque chose avec eux ? Que conseillez-vous. J'ai aussi pensé à changer les valeurs, si 0 alors c'est payé, si 1 alors ce n'est pas, puis dans la sélection, multiplier le nombre par l'indicateur, et si c'est zéro, alors j'obtiendrai juste zéro. s'il y en a un, j'obtiendrai le numéro lui-même. juste des calculs inutiles... Quelle est votre opinion ?

Et dans le package standard, vous pouvez faire beaucoup de choses avec. Quoi qu’il en soit, il possède un certain nombre de fonctionnalités utiles qui peuvent être activées séparément. Dans cet article, nous dévoilerons des fonctionnalités supplémentaires de PhpMyAdmin et verrons comment elles peuvent nous être utiles.

Paramètres

Avant de commencer, assurez-vous que PhpMyAdmin est opérationnel. Si vous vous connectez, vous remarquerez peut-être un message comme celui-ci :

Le stockage de configuration de phpMyAdmin n'est pas complètement configuré, certaines fonctionnalités étendues ont été désactivées. Pour savoir pourquoi, cliquez ici.
(Le magasin de configuration phpMyAdmin n'est pas configuré correctement, certaines fonctionnalités sont désactivées. Pour savoir pourquoi, cliquez ici)

$cfg["Serveurs"][$i]["controluser"] = "pma"; $cfg["Serveurs"][$i]["controlpass"] = "pmapass"; $cfg["Serveurs"][$i]["pmadb"] = "phpmyadmin"; $cfg["Serveurs"][$i]["bookmarktable"] = "pma__bookmark"; $cfg["Serveurs"][$i]["relation"] = "pma__relation"; $cfg["Serveurs"][$i]["table_info"] = "pma__table_info"; $cfg["Serveurs"][$i]["pdf_pages"] = "pma__pdf_pages"; $cfg["Serveurs"][$i]["table_coords"] = "pma__table_coords"; $cfg["Serveurs"][$i]["column_info"] = "pma__column_info"; $cfg["Serveurs"][$i]["historique"] = "pma__history"; $cfg["Serveurs"][$i]["récent"] = "pma__récent"; $cfg["Serveurs"][$i]["table_uiprefs"] = "pma__table_uiprefs"; $cfg["Serveurs"][$i]["utilisateurs"] = "pma__utilisateurs"; $cfg["Serveurs"][$i]["usergroups"] = "pma__usergroups"; $cfg["Serveurs"][$i]["navigationhiding"] = "pma__navigationhiding"; $cfg["Serveurs"][$i]["tracking"] = "pma__tracking"; $cfg["Serveurs"][$i]["userconfig"] = "pma__userconfig"; $cfg["Serveurs"][$i]["designer_coords"] = "pma__designer_coords"; $cfg["Serveurs"][$i]["favorite"] = 'pma__favorite'; $cfg["Serveurs"][$i]["savedsearches"] = "pma__savedsearches";

Modifiez le nom d'utilisateur, le mot de passe et le nom de la base de données à votre propre discrétion. Les valeurs de configuration restantes sont des noms de table. Les laisser vides désactivera les fonctionnalités correspondantes. Mais en général, je recommanderais de laisser ces noms tels quels. Selon la version de PhpMyAdmin, toutes les valeurs ne seront pas disponibles par défaut. Dans ce cas, j'ai utilisé PhpMyAdmin version 4.2.x.

Une fois la configuration terminée, vous devrez créer la base de données. Créez une base de données avec le nom que vous avez spécifié dans votre fichier de configuration. Ensuite, recherchez un fichier appelé create_tables.sql sur votre ordinateur. Très probablement, ce fichier se trouvera dans le répertoire racine de PhpMyAdmin installé ou dans le sous-répertoire des scripts. Si vous êtes sous Linux, l'emplacement sera /usr/share/phpMyAdmin/examples/ ou /usr/share/doc/phpmyadmin/scripts/ . Exécutez ce fichier dans la base de données créée. Si vous avez modifié les noms des tables dans la configuration ci-dessus, n'oubliez pas de les modifier également dans la base de données.

ACCORDER L'UTILISATION SUR mysql.* À "pma"@"localhost" IDENTIFIÉ PAR "pmapass" ; GRANT SELECT (Hôte, Utilisateur, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv) SUR mysql.user TO "pma"@"localhost" ; GRANT SELECT ON mysql.db TO "pma"@"localhost" ; GRANT SELECT ON mysql.host TO "pma"@"localhost" ; GRANT SELECT (Hôte, Base de données, Utilisateur, Table_name, Table_priv, Column_priv) ON mysql.tables_priv TO "pma" @ "localhost" ; GRANT SELECT, INSERT, UPDATE, DELETE ON phpmyadmin.* TO "pma"@"localhost" ;

Après vous être déconnecté de PhpMyAdmin et vous être reconnecté, nous devrions voir que l'avertissement a disparu. S'il ne manque pas, cliquez sur le lien pour découvrir ce qui manque.

Examinons des options supplémentaires.

Signets

En activant l'extension de favoris, vous pourrez ajouter des requêtes à vos favoris. Lorsque vous créez une demande, vous pouvez l'ajouter à vos favoris. De plus, si la demande a déjà été lancée, vous pouvez la mettre en signet en faisant défiler vers le bas de la page et en remplissant le formulaire.

Lorsque vous accédez à l'onglet SQL, en bas, vous verrez un panneau dans lequel vous pouvez sélectionner une requête parmi les signets. Sélectionnez celui dont vous avez besoin et indiquez ce que vous souhaitez en faire : exécuter, afficher ou supprimer.

Connexions

L'option relation est probablement la meilleure chose que j'ai jamais utilisée. Si vous utilisez des clés étrangères, ces clés deviendront cliquables. Lorsque vous cliquez sur une clé étrangère, vous serez redirigé vers une autre table : l'enregistrement référencé par la clé étrangère.

De plus, lors de l'ajout ou de la modification d'une clé étrangère, au lieu d'un champ de saisie de texte, une liste de toutes les options possibles vous sera présentée.

Informations sur le tableau

Bien sûr, voir une liste avec toutes les valeurs possibles pour une clé étrangère est une bonne chose. Mais ce serait encore mieux si on nous montrait une colonne spécifique au lieu d'un identifiant. Pour y parvenir, vous devez activer able_info . Allez dans le tableau principal, allez dans l'onglet « Structure » et cliquez sur le lien pour visualiser la relation. Si vous faites défiler vers le bas de la page, vous verrez quelle colonne apparaîtra pour cette clé.

Si je crée un nouvel enregistrement avec une clé étrangère, à côté de la valeur de la clé primaire, je verrai la valeur de la colonne que j'ai spécifiée. Désormais, il n'est plus nécessaire de se souvenir de la pièce d'identité.

Pages PDF

Les relations entre les tableaux peuvent être exportées au format PDF. Pour ce faire, vous devez activer pdf_pages, table_coords et relation dans la configuration. L'étape suivante consiste à ouvrir la base de données que vous souhaitez exporter au format PDF. Cliquez sur l'onglet « Opérations ». Cliquez ensuite sur le lien « Modifier ou exporter le schéma de câblage ». Remplissez tous les champs et cliquez sur « Soumettre ». Si vous avez rempli le formulaire, vous recevrez un fichier PDF avec toutes les données nécessaires.

Informations sur la colonne

Avec l'option d'informations sur les colonnes, vous pouvez ajouter des commentaires aux noms de colonnes. Cela peut être utile lorsque vous souhaitez expliquer à d'autres personnes ce qu'est la colonne et quelles données elle stocke. Vous pouvez le faire en modifiant les données de la colonne. Vous remarquerez peut-être qu'un nouveau commentaire a été ajouté à la colonne. Si vous saisissez un commentaire, il apparaîtra directement sous le nom de la colonne.

Les transformations peuvent être appliquées aux colonnes de la même manière. À l'aide des transformations, vous pouvez transformer un nom de fichier en un lien hypertexte qui ouvrira le fichier spécifié.

Histoire

Si vous activez l'historique, toutes les demandes effectuées via PhpMyAdmin seront enregistrées dans votre historique jusqu'à ce que vous vous déconnectiez ou fermiez le navigateur. L'historique peut être consulté en appelant la boîte de dialogue « Requête » et en cliquant sur le bouton « Historique SQL ».

Récent

Dans la barre de navigation, vous remarquerez peut-être un bouton « Récent » qui contient une liste déroulante des tableaux que vous avez récemment consultés. Cette liste est affichée par défaut. Mais si vous souhaitez le stocker de manière permanente entre les sessions, vous pouvez activer l'option récente dans la configuration, et votre historique de navigation sera enregistré dans la base de données.

Paramètres d'affichage du tableau

Lors de l'affichage des tableaux, vous pouvez modifier l'ordre des colonnes en les déplaçant. Ces changements ne sont visibles que par vous. L'ordre réel des colonnes ne change pas. De plus, vous pouvez également trier les colonnes par ordre croissant et décroissant. Ces modifications sont stockées dans la session et, une fois déconnectées, elles seront réinitialisées et remplacées par les paramètres par défaut. Cependant, si vous souhaitez que les tableaux soient disposés « à votre manière » à tout moment, activez l'option table_uiprefs.

Utilisateurs et groupes d'utilisateurs

Vous ne souhaiterez peut-être pas afficher toutes les fonctionnalités pour tous les utilisateurs. Dans ce cas, vous pouvez les répartir en groupes dans l'onglet « Utilisateurs ». Créez un nouveau groupe et déterminez ce que les utilisateurs de ce groupe peuvent voir. Vous pouvez ensuite ajouter des utilisateurs à ce groupe et vous pouvez être sûr qu'ils ne verront que les éléments de menu que vous leur autorisez à voir. De cette façon, vous pouvez donner à différents utilisateurs l'accès à différentes fonctionnalités du système et masquer les options inutilisées.

Masquer la navigation

Avec navigationhiding, vous pouvez masquer certains tableaux dans la barre de navigation. Cliquer sur l’icône de l’ampoule à côté du nom de la table la masquera. Vous pouvez également le rendre à nouveau visible en cliquant à nouveau sur l'icône de l'ampoule. De cette façon, vous soulagerez la barre de navigation des tables inutilisées.

Suivi

Grâce à cette fonctionnalité, vous pouvez suivre toutes les modifications apportées à des tables spécifiques à l'aide de PhpMyAdmin. En allant dans le tableau et en ouvrant l'onglet « Suivi », vous pouvez créer une version du tableau actuel. Désormais, toutes les modifications apportées à ce tableau à l'aide de PhpMyAdmin seront enregistrées. De la même manière, vous pouvez facilement déterminer quelles modifications ont été apportées au tableau depuis la création de la dernière version.

Paramètres personnalisés

Tous les paramètres utilisateur sont stockés par défaut dans votre navigateur. Cela signifie que si vous décidez d'utiliser un autre navigateur ou de vider le cache de votre navigateur, tous vos paramètres seront perdus. En activant userconfig, vous enregistrerez définitivement vos paramètres dans la base de données.

Coordonnées du concepteur de base de données

En activant designer_coords, vous pouvez afficher les relations entre vos tables dans la vue du concepteur de base de données. En accédant à la base de données et en cliquant sur l'onglet « Concepteur », vous verrez quelque chose de similaire à l'image ci-dessous, qui montre les relations entre les tables. Parallèlement, vous pouvez gérer visuellement les relations entre les tables à l'aide de cette fenêtre.

Favoris

En activant l'option Favoris, vous remarquerez peut-être que des icônes en forme d'étoile apparaissent à côté des noms de tables en mode navigation dans la base de données. Pour ajouter une table à vos favoris, cliquez simplement sur l'étoile. Dans la barre de navigation, vous verrez une liste déroulante « Favoris ». Les tables que vous avez ajoutées à vos favoris apparaîtront dans cette liste.

Sauvegarde des paramètres de recherche

En ouvrant la base de données et en allant dans l'onglet Requête, vous pouvez paramétrer des recherches avancées. Les options de recherche peuvent être mises en signet. Notez qu’il ne s’agit pas des signets de requête SQL évoqués précédemment. Avec cette option, vous pouvez enregistrer vos paramètres de recherche et les utiliser plus tard.

Conclusion

Les fonctionnalités répertoriées sont faciles à activer et peuvent vraiment vous aider à travailler avec des bases de données via PhpMyAdmin. J'aime particulièrement la possibilité d'explorer les clés étrangères afin de pouvoir voir les enregistrements associés. J'espère que vous activez ces fonctionnalités et qu'elles vous seront utiles dans votre travail quotidien.

Les journaux d'événements constituent le premier et le plus simple outil permettant de déterminer l'état du système et d'identifier les erreurs. Il existe quatre journaux principaux dans MySQL :

  • Journal des erreurs— journal des erreurs standard collecté pendant l'exécution du serveur (y compris le démarrage et l'arrêt) ;
  • Journal binaire— un journal de toutes les commandes de modification de la base de données, nécessaires à la réplication et aux sauvegardes ;
  • Journal des requêtes générales— journal des requêtes principal ;
  • Journal des requêtes lentes— journal des requêtes lentes.

Journal des erreurs

Ce journal contient toutes les erreurs survenues lors de l'exécution du serveur, y compris les erreurs critiques, ainsi que les arrêts et démarrages du serveur et les avertissements. C'est par là que vous devriez commencer en cas de panne du système. Par défaut, toutes les erreurs sont affichées sur la console (stderr), vous pouvez également enregistrer les erreurs dans syslog (par défaut sur Debian) ou dans un fichier journal séparé :

Log_error=/var/log/mysql/mysql_error.log

# Les erreurs seront écrites dans mysql_error.log

Nous vous recommandons de garder ce journal activé pour identifier rapidement les erreurs. Et pour comprendre ce que signifie telle ou telle erreur, MySQL dispose de l'utilitaire perror :

Shell> perror 13 64 Code d'erreur du système d'exploitation 13 : autorisation refusée Code d'erreur du système d'exploitation 64 : la machine n'est pas sur le réseau

# Explique la signification des codes d'erreur

Journal binaire (alias binaire)

Toutes les commandes de modification de la base de données sont enregistrées dans le journal binaire, utile pour réplication et la récupération.

Il s'allume comme ceci :

Log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 5 max_binlog_size = 500 M

# Spécifie l'emplacement, la durée de vie et la taille maximale du fichier

Veuillez noter que si vous n'allez pas faire évoluer le système et implémenter la tolérance aux pannes, il est préférable de ne pas activer le journal binaire. Cela consomme beaucoup de ressources et réduit les performances du système.

Journal des demandes

Ce journal contient toutes les requêtes SQL reçues et des informations sur les connexions client. Peut être utile pour l'analyse et l'optimisation des index, ainsi que pour identifier les requêtes erronées :

Fichier_log_général = /var/log/mysql/mysql.log journal_général = 1

# Inclut le journal et indique l'emplacement du fichier

Vous pouvez également l'activer/désactiver pendant que le serveur MySQL est en cours d'exécution :

SET GLOBAL general_log = "ON" ; SET GLOBAL general_log = "OFF" ;

# Vous n'avez pas besoin de redémarrer le serveur pour l'utiliser

Journal des requêtes lent

Le journal est utile pour identifier les requêtes lentes, c'est-à-dire inefficaces. Lire la suite dans Cet article.

Affichage des journaux

Pour afficher les journaux sur Debian (Ubuntu), vous devez exécuter :

# Queue du journal des erreurs -f /var/log/syslog #Queue du journal des requêtes -f /var/log/mysql/mysql.log # Enregistrer les demandes lentes tail -f /var/log/mysql/mysql-slow.log

# Si les journaux ne sont pas spécifiés séparément, ils se trouvent dans /var/lib/mysql

Rotation des journaux

N'oubliez pas de compresser (archiver, faire pivoter) les fichiers journaux afin qu'ils prennent moins de place sur le serveur. Pour ce faire, utilisez l'utilitaire logrotation en éditant le fichier de configuration /etc/logrotate.d/mysql-server:

# - J'ai tout mis dans un seul bloc et j'ai ajouté des scripts partagés, pour que mysql n'obtienne # flush-logs"d qu'une seule fois. # Sinon, les journaux binaires augmenteraient automatiquement de n fois chaque jour. # - Le journal des erreurs est obsolète, les messages vont maintenant dans syslog./var/log/mysql.log /var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log(rotation quotidienne 7 manquantok créer 640 mysql adm compresser les scripts partagés postrotate test -x /usr/bin/mysqladmin || exit 0 # Si cela échoue, vérifiez debian.conf ! MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" if [ -z "`$MYADMIN ping 2>/dev/null`" ]; alors # Vraiment pas de mysqld ou plutôt un utilisateur debian-sys-maint manquant ? # Si cela se produit et ne constitue pas une erreur, veuillez signaler un bug. #si ps cax | grep -q mysqld; alors si killall -q -s0 -umysql mysqld ; puis quittez 1 fi sinon $MYADMIN flush-logs fi endscript )

# Compresse et archive les journaux nécessaires, nettoie les fichiers

Journal DDL

MySQL maintient également un journal du langage des données. Il collecte des données à partir d'opérations telles que DROP_TABLE et ALTER_TABLE. Le journal est utilisé pour récupérer des échecs survenus lors de ces opérations. Le journal DDL est un fichier binaire et n'est pas destiné à être lu par l'utilisateur, donc ne le modifiez pas et ne le supprimez pas.

Le plus important

Activez toujours le journal des erreurs, utilisez le journal des requêtes pour vérifier la connexion de l'application à la base de données, vérifiez les requêtes et le fonctionnement. Le journal des requêtes lentes est utile pour optimiser les performances de MySQL.