MySQL

Installation

apt-get install mysql-server
mysqlpasswort vergeben

MySql starten :

rcmysql start
#oder
/etc/init.d/mysql restart


MySql einen extra Benutzer "mono" für eine Datenbank "mono" anlegen :
mysql -h localhost  -u root -p
password:
create database mono;
grant CREATE,INSERT,DELETE,UPDATE,SELECT,ALTER on mono.* to benutzer@localhost;
set password for benutzer@localhost = password('geheimespasswort');
flush privileges;
commit;
exit;
MySql Passwort setzen ? :
/mysql/bin/mysqladmin -u root password geheim
#oder
SET PASSWORD FOR 'meinBenutzer'@'%' = PASSWORD('geheim');
Datenbanken anzeigen:
show databases;
Datenbank ändern:
use track;
SQL-Script ausführen:
source migrate370to380.sql;
Version auslesen:
show global variables like "version"; 
Datenbank sichern:
mysqldump -uroot -pseinpasswort -hlocalhost meinedb > meinedb.sql
Datenbank zurück spielen:
mysql -uroot -pseinpasswort <meinedb.sql

oder

mysql -uroot -pPasswort
use bugzilla3;
source meinDump.sql;
exit;
/etc/init.d/mysql restart
Cachehits und gecachte Querys anzeigen:

als sqlroot anmelden, dann:

show status like 'Qcache%';
MYSQL im Netz freigeben

Vorsicht Zugriff von allen Rechnern erlaubt!
in Datei /etc/mysql/my.cnf den Eintrag ändern:

bind-address  = 192.168.1.11 #IPadresse des Mysqlservers

dann Benutzer freischalten deshalb als root an mysql anmelden:

# GRANT ALL ON *.* to 'root'@'%' IDENTIFIED BY 'geheim';
GRANT ALL ON *.* to 'meinBenutzer'@'clientoderIP_des_Benutzers' IDENTIFIED BY 'geheimnis';
flush privileges;

anschließend kontrollieren wer darf von wo sich anmelden?

use mysql;
select host,user from user;
select user from mysql.user;
einem Benutzer fxacc erlauben vom Rechner 192.168.10.99 auf die Datenbank fxacc zuzugreifen
GRANT ALL PRIVILEGES ON `fxacc` . * TO 'fxacc'@'192.168.10.99';
Benutzerrechte ansehen
SHOW GRANTS;
SHOW GRANTS for 'myuser'@'localhost';
Recht auf export in Datei geben
GRANT FILE ON *.* to 'myuser'@'localhost';
SELECT * from mydb into OUTFILE '/tmp/myfile.sql';
MySQL säubern

testdatenbank löschen.
anonymous löschen.
rootpasswort eventuell ändern.

mysql_secure_installation

Fehler

too many connections

mysql>show processlist;
mysql>show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+

Eintrag max_connections in /etc/mysql/my.cnf auf 500 erhöhen. Ggf. mehr Speicher.

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 500 |
+-----------------+-------+

Serverdienst dann neu starten.
oder ohne Neustart des Serverdienstes:

set @@global.max_connections = 500;

die Sleep-Connections von 8 Stunden auf 1 Stunde drücken:

set @@global.interactive_timeout=3600;
set @@global.wait_timeout=3600;
die Ausgabe in ein Homeverzeichnis (''into outfile /home/myuser/test/datei.sql'') schlägt fehl.\\

MYSQL schützt die Home- und Systemverzeichnisse, deshalb eine Datei /etc/systemd/system/mariadb.service.d/noprotect.conf
mit dem Inhalt erstellen und dienst dann neu starten:

[Service] 
ProtectHome=false

sowie die rechte an dem Verzeichnis mit setfacl -d -m u:mysql:rwx /home/myuser/test ändern.

Tuning

wget http://mysqltuner.pl
mysql> show variables like 'query_cache_type';

Eintrag query_cache_type=1 in /etc/mysql/my.cnf prüfen/setzen.

Beispiel Mysql

Lese aus der Datenbank puppet die Tabellen nodes, roles, profiles, os oder creator wahlweise aus:
Der Aufruf der client.html übergibt der variable 'q' eine Zahl abhängig von der Auswahl und fragt damit die Datei mysql.php ab.

client.html
<html>
<head>
<script>
function show(str) {
    if (str == "") {
        document.getElementById("txtHint").innerHTML = "";
        return;
    } else {
        if (window.XMLHttpRequest) {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
        } else {
            // code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                document.getElementById("txtHint").innerHTML = this.responseText;
            }
        };
        xmlhttp.open("GET","mysql.php?q="+str,true);
        xmlhttp.send();
    }
}
</script>
</head>
<body>
<form>
<select name="myform" onchange="show(this.value)">
  <option value="">Select a table:</option>
  <option value="1">nodes</option>
  <option value="2">roles</option>
  <option value="3">profiles</option>
  <option value="4">os</option>
  <option value="5">creator</option>
  </select>
</form>
<br>
<div id="txtHint"><b>table info will be listed here...</b></div>
</body>


mysql.php
<?php
  //--------------------------------------------------------------------------
  // Aufruf mit http://meinserver/mysql.php?q=1
  //--------------------------------------------------------------------------
$q = intval($_GET['q']);
$buf = "";
switch($q){
case 1: $buf = 'nodes';break;
case 2: $buf = 'roles';break;
case 3: $buf = 'profiles';break;
case 4: $buf = 'os';break;
case 5: $buf = 'creator';break;
default: echo "falscher Wert, ende"; exit ;
}
 
  $host = "mysqlsrv";
  $user = "puppetuser";
  $pass = "verysecret";
  $dbName = "puppetdb";
 
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbName", $user,$pass, array( PDO::ATTR_PERSISTENT => true));
 
    $sql = "SELECT * FROM ".$buf.";";
        foreach ($pdo->query($sql) as $row) {
    #   echo $row['name']."<br />";
    echo "<pre>";
         print_r($row,false);
        #var_dump($row);
    echo "</pre>";
 
    #echo ($row);
        # $pdo = null;
        }
    }
catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}



zurück