Datenbank über SSH leeren – SELFHTML-Forum Forum als Ergänzung zum SELFHTML-Wiki und zur Dokumentation SELFHTML https://forum.selfhtml.org/self Datenbank über SSH leeren Thu, 19 Jan 23 12:48:14 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805576#m1805576 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805576#m1805576 <p>Hallo,</p> <p>wie heißt der Befehl, um eine bestimmte Datenbank über SSH zu leeren (nicht löschen)?</p> <p>ich finde im Netz nur Links, in denen die DB gelöscht wird, das will ich aber gar nicht.</p> <p>Hank</p> Datenbank über SSH leeren Thu, 19 Jan 23 13:24:07 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805577#m1805577 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805577#m1805577 <p>Servus Hank,</p> <p>was ist das für eine DB? mysql? oracle? access?</p> <p>mit dieser Info + "ssh truncate database" kannst du bei google sicher einiges finden.</p> <p>ciao</p> <div class="signature">-- <br> embrace the absurdity </div> Datenbank über SSH leeren Thu, 19 Jan 23 18:21:31 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805580#m1805580 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805580#m1805580 <p>Hi,</p> <blockquote> <p>wie heißt der Befehl, um eine bestimmte Datenbank über SSH zu leeren (nicht löschen)?</p> </blockquote> <p>willst Du wirklich eine ganze Datenbank leeren, oder geht es um eine einzelne Tabelle?</p> <p>cu,<br> Andreas a/k/a MudGuard</p> Datenbank über SSH leeren Thu, 19 Jan 23 14:29:13 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805578#m1805578 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805578#m1805578 <p>Hallo <a href="/users/2784" class="mention registered-user" rel="noopener noreferrer">@henman</a></p> <p>Schön, nach langer Abwesenheit wieder was von Dir zu lesen!</p> <p>Herzliche Grüße</p> <p>Matthias Scharwies</p> <div class="signature">-- <br> Eigentlich hatte ich heute <a href="https://wiki.selfhtml.org/wiki/Kategorie:ToDo" rel="nofollow noopener noreferrer">viel vor</a> - jetzt habe ich morgen viel vor! </div> Datenbank über SSH leeren Fri, 20 Jan 23 10:40:16 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805584#m1805584 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805584#m1805584 <p>Hallo henman,</p> <blockquote> <p>was ist das für eine DB? mysql? oracle? access?</p> </blockquote> <p>mysql</p> <blockquote> <p>mit dieser Info + "ssh truncate database" kannst du bei google sicher einiges finden.</p> </blockquote> <p>Habe ich versucht, aber ich finde vieles widersprüchliches.</p> <p>Nun habe ich es letztlich mit</p> <pre><code class="block"> /usr/bin/mysqldump -uDBUSER -p'PASS' -hlocalhost --add-drop-table --no-data DBNAME | grep ^DROP | mysql -uDBUSER -p'PASS' DBNAME </code></pre> <p>Edit: Ich hatte ein falsches Passwort genutzt.</p> <p>Ich erhalte:</p> <pre><code class="block"> mysqldump: [Warning] Using a password on the command line interface can be insecure. mysql: [Warning] Using a password on the command line interface can be insecure. mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces </code></pre> <p>Die ersten beiden Meldungen verstehe ich.<br> Aber was bedeutet denn die error-Meldung?</p> <p>Vor allem vor dem Hintergrund, dass die DB tatsächlich geleert wird.</p> <p>Hank</p> Datenbank über SSH leeren Thu, 19 Jan 23 15:16:04 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805579#m1805579 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805579#m1805579 <p>Servus Matthias,</p> <p>danke dir :)</p> <p>ciao</p> <div class="signature">-- <br> embrace the beauty </div> Datenbank über SSH leeren Fri, 20 Jan 23 10:50:29 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805585#m1805585 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805585#m1805585 <p>Hallo Andreas,</p> <blockquote> <p>willst Du wirklich eine ganze Datenbank leeren, oder geht es um eine einzelne Tabelle?</p> </blockquote> <p>Nein, tatsächlich eine komplette DB.</p> <p>Hank</p> Datenbank über SSH leeren Fri, 20 Jan 23 13:14:19 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805591#m1805591 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805591#m1805591 <p>Hallo Hank,</p> <p>füge die Option --no-tablespaces hinzu und die Forderung nach dem PROCESS Privileg sollte verschwinden. Zumindest deute ich das MYSQL-Handbuch so. Während der mysqldump-Ausführung machen die fehlenden Rechte keine Probleme - hier wird ja nur ein SQL Script generiert. Aber wenn Du das erzeugte Script nachher ausführen willst und --no-tablespaces fehlt, dann will er außer den Tabellen auch Tablespaces anlegen und dafür braucht man entsprechende Rechte.</p> <p>Die Frage, die Du Dir aber stellen musst, ist: Wie gehe ich mit den InnoDB Tablespaces meiner Datenbank um? Will ich die löschen? Sollen sie erhalten bleiben?</p> <p>Aber grundsätzlich ist das, was Du da machst, ein Schuss von hinten durch die Brust ins Auge.</p> <ul> <li>Du lässt mysqldump mit --no-data laufen. Seinen Hauptzweck, nämlich ein Script für eine logische Datensicherung zu erzeugen, erfüllt es damit nicht mehr</li> <li>Statt dessen fügst Du mit --add-drop-table hinzu, dass das generierte Script DROP TABLE statements für jede gesicherte Tabelle hinzu bekommt.</li> <li>Und dann suchst du mit GREP ^DROP alle Zeilen, die mit DROP beginnen, und verfütterst die an die generische MYSQL Batch Engine.</li> </ul> <p>Ohne --no-tablespace könnte es gut sein, dass da auch noch DROP TABLESPACE Anweisungen im Script verbleiben. Das solltest Du Dir gut anschauen, bevor Du es an das mysql Tool übergibst.</p> <p>Andererseits - ein Script, dass blindlings alle Tables einer DB droppt, ist vermutlich einfacher nicht zu erzeugen...</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> Datenbank über SSH leeren Fri, 20 Jan 23 17:13:32 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805595#m1805595 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805595#m1805595 <p>Hm. Definiere mal „leeren“. Was ist mit Tabellen, Views, Funktionen und dergleichen? Sollen die weg oder erhalten bleiben?</p> Datenbank über SSH leeren Fri, 20 Jan 23 19:19:56 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805599#m1805599 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805599#m1805599 <p>Hallo Rolf,</p> <blockquote> <p>Die Frage, die Du Dir aber stellen musst, ist: Wie gehe ich mit den InnoDB Tablespaces meiner Datenbank um? Will ich die löschen? Sollen sie erhalten bleiben?</p> </blockquote> <p>Ich nutze keine Inno-DBs.</p> <blockquote> <p>Aber grundsätzlich ist das, was Du da machst, ein Schuss von hinten durch die Brust ins Auge.</p> <ul> <li>Du lässt mysqldump mit --no-data laufen. Seinen Hauptzweck, nämlich ein Script für eine logische Datensicherung zu erzeugen, erfüllt es damit nicht mehr</li> </ul> </blockquote> <p>Kommt davon, wenn man Befehle nachmacht, die man irgendwo ergoogelt hat und die man im Grunde nicht versteht.</p> <blockquote> <p>Andererseits - ein Script, dass blindlings alle Tables einer DB droppt, ist vermutlich einfacher nicht zu erzeugen...</p> </blockquote> <p>Was ich will, habe ich Raketenwilli <a href="https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805598#m1805598" rel="noopener noreferrer">geschrieben</a>, daher hier derf Link dort hin. Ich will im Grunde einen Ersatz für mein bisheriges php-Schnipsel.</p> <p>Hank</p> Datenbank über SSH leeren Fri, 20 Jan 23 19:16:25 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805598#m1805598 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805598#m1805598 <blockquote> <p>Hm. Definiere mal „leeren“. Was ist mit Tabellen, Views, Funktionen und dergleichen? Sollen die weg oder erhalten bleiben?</p> </blockquote> <p>Alles soll weg. Nur die DB selber soll erhalten bleiben. Aber der komplette Inhalt soll weg und zwar genau so, als hätte ich im phpmyadmin DB leeren angeklickt.</p> <p>Oder über php (so hab ichs zuvor gemacht):</p> <pre><code class="block language-php"> <span class="token variable">$mysqli</span> <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">mysqli</span><span class="token punctuation">(</span><span class="token variable">$db_host</span><span class="token punctuation">,</span><span class="token variable">$db_user</span><span class="token punctuation">,</span><span class="token variable">$db_pass</span><span class="token punctuation">,</span><span class="token variable">$db_name</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span><span class="token punctuation">(</span><span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token property">connect_error</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">die</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'Connect Error ('</span><span class="token operator">.</span><span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token property">connect_errno</span><span class="token operator">.</span><span class="token string single-quoted-string">') '</span> <span class="token operator">.</span><span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token property">connect_error</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"show tables"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$table</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token function">fetch_array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'DROP TABLE '</span><span class="token operator">.</span><span class="token variable">$table</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Aber der Automatismus über das php-script ist mir zu heikel. Da wird geleert, ohne dass ich nochmal einen Blick drüber werfen könnte. Ich hätte das lieber als Konsolenbefehl. Das ist nämlich die Alternative, ich lasse mir Konsolenbefehle generieren und mache dann händisch Schritt für Schritt.</p> <p>Hank</p> Datenbank über SSH leeren Fri, 20 Jan 23 23:07:14 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805603#m1805603 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805603#m1805603 <p>Hallo Hank,</p> <p>Deine Pipe-Kette von <s>heute</s> gestern mittag macht aber auch einen Durchmarsch.</p> <p>In PHP könntest Du, wenn Du vorsichtig rangehen willst, erstmal einen ECHO statt des mysqli->query() Aufrufs machen. Das dünkt mich auf jeden Fall besser als mysqldump zweckzuentfremden…</p> <p>Ist eigentlich ein DROP wirklich das, was Du brauchst? Legst Du die Tables nachher wieder an? Dient das zum Löschen der Inhalte, ohne den DB-Log zu belasten (ein DELETE kann bei vielen Sätzen echt dauern)? In dem Fall schau Dir auch mal den <a href="https://dev.mysql.com/doc/refman/5.7/en/truncate-table.html" rel="nofollow noopener noreferrer">TRUNCATE TABLE</a> Befehl an.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div> Datenbank über SSH leeren Sat, 21 Jan 23 07:56:12 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805605#m1805605 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805605#m1805605 <blockquote> <p>Oder über php (so hab ichs zuvor gemacht):</p> <pre><code class="block language-php"> <span class="token variable">$result</span> <span class="token operator">=</span> <span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string double-quoted-string">"show tables"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">while</span><span class="token punctuation">(</span><span class="token variable">$table</span> <span class="token operator">=</span> <span class="token variable">$result</span><span class="token operator">-></span><span class="token function">fetch_array</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token variable">$mysqli</span><span class="token operator">-></span><span class="token function">query</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'DROP TABLE '</span><span class="token operator">.</span><span class="token variable">$table</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> </code></pre> <p>Aber der Automatismus über das php-script ist mir zu heikel. Da wird geleert, ohne dass ich nochmal einen Blick drüber werfen könnte.</p> </blockquote> <p>Nun, wenn Du an der Stelle doch alle Tabellen hast, warum baust Du nicht einfach ein kleines HTML-Formular mit einer Checkbox und entfernst dann in nächsten Schritt (also nach dem Absenden) diejenigen Tabellen, welche Du ausgewählt hast?</p> <p>Achte auf eine sichere Authentifizierung…</p> Datenbank über SSH leeren Sun, 22 Jan 23 13:42:35 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805627#m1805627 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805627#m1805627 <blockquote> <p>The best way to drop all tables in a database is by executing DROP DATABASE, which will drop the database itself, and all tables in it.</p> </blockquote> <p>sagt: <a href="https://mariadb.com/kb/en/drop-table/" rel="nofollow noopener noreferrer">https://mariadb.com/kb/en/drop-table/</a></p> <p>→ Dropping All Tables in a Database</p> <p>Dort steht noch mehr … das trifft dann auch auf VIEWS, FUNCTIONS, FOREIGN_KEY_CHECKS und dergleichen zu.</p> <p>Allerdings könnte es sein, dass Du das nicht darfst, und anschauen musst Du Dir die Tabellen auch anderweitig. Nur bist Du bei der Frage „irgendwie widersprüchlich“.</p> Datenbank über SSH leeren Fri, 20 Jan 23 23:03:36 Z https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805602#m1805602 https://forum.selfhtml.org/self/2023/jan/19/datenbank-uber-ssh-leeren/1805602#m1805602 <p>Hallo Hank,</p> <blockquote> <p>Ich nutze keine Inno-DBs.</p> </blockquote> <p>Hm. Dann ist diese Meldung rein pro forma drin. Aber schon merkwürdig. CREATE TABLE Befehle enthalten doch einen ENGINE-Parameter, und dann müsste er ja wissen, dass kein InnoDB verwendet wird.</p> <p>Muss ich mir wohl mal genauer anschauen, was da passiert. Ich habe zwar nur ein Windows-Mariechen, aber das sollte da ja hinreichend kompatibel sein.</p> <p><em>Rolf</em></p> <div class="signature">-- <br> sumpsi - posui - obstruxi </div>