Synology-Forum.nl

Packages => Officiƫle Packages => Maria DB => Topic gestart door: beste-els op 07 januari 2022, 12:32:40

Titel: Waar staat mijn MySQL Command-Line Client?
Bericht 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);
?>
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: Wyodor op 07 januari 2022, 15:42:23
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.
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: Wyodor op 07 januari 2022, 17:58:47
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$resultTRUE ) . '</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>
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: beste-els op 08 januari 2022, 11:57:06
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.
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: Birdy op 08 januari 2022, 12:33:48
Om root te worden, log je eerst in als admin of een gebruiker met admin rechten.
Dan geef je in
Citaat
sudo -i
met het password van 1 van de 2 bovenstaande gebruiker.
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: Wyodor op 08 januari 2022, 12:38:40
Sudo is niet belangrijk.

Je moet de hele path naam gebruiken.
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: Wyodor op 08 januari 2022, 12:49:08
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
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: Briolet op 08 januari 2022, 15:30:01
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.
Titel: Re: Waar staat mijn MySQL Command-Line Client?
Bericht door: beste-els op 10 januari 2022, 11:43:32
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?