Synology-Forum.nl
Packages => Officiƫle Packages => Maria DB => Topic gestart door: beste-els op 07 januari 2022, 12:32:40
-
Ik probeer vanuit PHP een grote query te runnen op mijn MariaDB10. Ik doe dat (in PHP) met shell_exec(mysql ... ) waarbij een SQL script dienst doet als input file.
Werkt perfect op mijn DS920+ met DSM 7.0.1 maar doet helemaal niets op mijn (pas opgetuigde) DS213+ met DSM 6.2.4. De hele query loopt wel in de SQL-tab in PHPMyAdmin dus de syntax is ok.
Het is of een rechtenkwestie of een syntaxprobleem maar ik kom er niet achter. Ik wil daarom met Putty in mijn DS213+ duiken om te zien of het wel lukt als ik met de hand de MySQL Command-Line Client opstart. Misschien geeft die een fasoenlijke error message waar ik wat mee kan. Maar waar vind ik die CLC? Wat is het pad naar de MySQL Command-Line Client?
<?php
$dbuser = 'my_username';
$dbhost = '127.0.0.1';
$dbpass = 'my_pwd';
$dbport = '3307';
$dbnames = 'my_db';
$script_path = dirname(__FILE__) . '/inputscript.sql';
$command = "mysql --user={$dbuser} --password={$dbpass} --host {$dbhost} --database {$dbnames} < {$script_path}";
$output = shell_exec($command);
?>
-
Na wat proberen lukt het als volgt.
Met de terminal inloggen als admin.
Dan dit commando invoeren om met mariadb te verbinden.
/usr/local/mariadb10/bin/mysql -u root -p
Dat root wachtwoord van mariadb intiepen.
In het script dan ook het path invullen.
-
Voor de liefhebber die het ook wil proberen.
<?php
$dbuser = 'gebruiker';
$dbhost = '127.0.0.1';
$dbpass = 'wachtwoord';
$dbport = '3307';
$dbnames = 'login'; // simpele database
// het inputscript bevat deze query
// SELECT id, username, password FROM users;
$script_path = dirname(__FILE__) . '/inputscript.sql';
echo $script_path . '<br /><br />';
$command = "/usr/local/mariadb10/bin/mysql --user={$dbuser} --password={$dbpass} --host={$dbhost} --port={$dbport} --database={$dbnames} < {$script_path}";
echo $command . '<br /><br />';
$output = shell_exec($command);
echo $output . '<br /><br />';
$result = explode("\n", $output );
echo '<pre>' . print_r( $result, TRUE ) . '</pre>';
?>
<table border="1">
<?php
$head = TRUE;
foreach ( $result as $key => $value )
{
if ( !empty( $value ) )
{
$res = explode("\t", $value );
if ( $head )
{
echo '<thead>';
echo '<tr>';
foreach ( $res as $column )
{
echo '<th>' . $column . '</th>';
}
$head = FALSE;
echo '</head>';
echo '<tbody>';
} else {
echo '<tr>';
foreach ( $res as $field )
{
echo '<td>' . $field . '</td>';
}
echo '</tr>';
}
}
}
echo '</tbody>';
?>
</table>
-
Beste Wyodor, dank voor je hulp, het is helemaal gelukt. Mijn PHP-script loopt als een trein!
Nu ik je toch aan de lijn heb...
Ik probeer in een Putty-console mysql te starten. Lukt me niet. Ik ga naar de directory /usr/local/mariadb10/bin en tik het commando mysql in. De error message die ik dan krijg is: ERROR 1045 (28000): Access denied for user 'beste-els'@'localhost' (using password: NO). Het werkt ook niet als ik intoets mysql -u root. Ik krijg dan dezelfde foutmelding: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO). Ik loop tegen hetzelfde probleem in de directory /volume1/@appstore/MariaDB10/usr/local/mariadb10/bin.
Misschien lukt het wel als ik SSH opstart als user root maar ik weet niet wat het wachtwoord is van root.
-
Om root te worden, log je eerst in als admin of een gebruiker met admin rechten.
Dan geef je in sudo -i
met het password van 1 van de 2 bovenstaande gebruiker.
-
Sudo is niet belangrijk.
Je moet de hele path naam gebruiken.
-
Ik zie dat je ook deze kan gebruiken.
/volume1/@appstore/MariaDB10/usr/local/mariadb10/bin/mysql -u root -p
Kwam het tegen in deze twee laatste posts :
https://community.synology.com/enu/forum/17/post/8248
-
De error message die ik dan krijg is: ERROR 1045 (28000): Access denied for user
Dat zal komen omdat je het default commando 'mysql' gebruikt. Als je het pad ervoor tikt, pakt hij de versie die in mariadb zit.
Als je het commando vaak gebruikt, kun je ook een simlink maken naar je bin directory. Dan mag je daarna altijd het pad weglaten omdat hij dan standaard weet waar het commando staat. Je moet het commando dan wel een andere naam geven omdat er al een mysql is.
Volgens mij moet dit werken:
sudo ln -s /usr/local/mariadb10/bin/mysql /usr/bin/mariasql
Het commando heet dan 'mariasql' en die gebruikt dan de versie in het pakket. Maar ik zou dit alleen doen als je het commando vaak wilt gebruiken en niet steeds het pad wilt intikken.
-
Bedankt Birdy en Wyodor voor jullie bijdragen. Vooral de schermdump van Wyodor vond ik erg handig om snel en gemakkelijk de oplossing te vinden.
En Briolet natuurlijk bedankt voor je aanwijzing naar de symbolische link (mariasql); het werkte meteen en het is leuk om ook eens met dat Linux-commando in aanraking te komen!
Eigenlijk jammer dat er geen CLI in DSM zit of heb ik iets gemist?