Mit ‘MySQL’ Tagged einträge

DHCP Server mit MySQL

Freitag, März 6th, 2009

So hier dokumentiere ich mal wie ich den Wohnheims DHCP Server mit MySQL Unterstützung aufgesetzt habe.

Zuerst eine Datenbank aufsäten. In meinem Fall ist das eine MySQL 5.0 Datenbank.

CREATE TABLE IF NOT EXISTS `mac` (
  `mac` varchar(17) collate utf8_unicode_ci NOT NULL default '00:00:00:00:00:00',
  `ip` varchar(15) collate utf8_unicode_ci NOT NULL default '149.201.241.0',
  `host` varchar(100) collate utf8_unicode_ci NOT NULL,
  `status` enum('activ','static','new','notpay','inactiv') collate utf8_unicode_ci NOT NULL default 'activ',
  `name` varchar(255) collate utf8_unicode_ci NOT NULL,
  `comment` text collate utf8_unicode_ci NOT NULL,
  `zeit` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`mac`),
  UNIQUE KEY `host` (`host`,`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Wichtig! Für mein Script wird das „Comand Line Interface“ für PHP, das mann einfach über apt-get install php5_cli installieren kann, benötigt.

Es Prüft zuerst ob Änderungen an der DHCP Tabelle vorgenommen worden sind. Dann schreib es die Mac, Host liste in die /etc/dhcp3/hosts.conf und refrecht den DHCP-Server.

/usr/local/sbin/dhcp.php

#!/usr/bin/php5
= ". fileatime($conf) ."";
if(mysql_num_rows(mysql_query($sql,$link)) > 0 || !file_exists($conf))
{
	//DATEN
	$sql = "SELECT mac,ip,host,comment FROM mac WHERE NOT ip='' AND status='activ' ORDER BY host";
	$q = mysql_query($sql, $link);
	echo mysql_error($link);
	for(;$ds = mysql_fetch_array($q);)
	{
	    if (preg_match("/[0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f]/i",$ds['mac']))
	    {
	        if($ds['name']) 
		$daten .= '        # '. $ds['name'] .'
	';
	        $daten .= '        host '. $ds['host'] .' {
		    hardware ethernet '. $ds['mac'] .';
	            fixed-address '. $ds['ip'] .';
	            option host-name "'. $ds['host'] .'";
	        }
	';
	    }
	}
	
	// Speichern
	$fp = fopen($conf, 'w+');
	fwrite($fp, $daten);
	fclose($fp);
	
	system ("/etc/init.d/dhcp3-server force-reload");
}

system("exit 0");
?>

Dann die /etc/dhcp3/dhcpd.conf anpassen:
server-name "dhcp";
deny bootp;

authoritative;

shared-network bauhuette
{
option domain-name "bauhuette.fh-aachen.de";

subnet 149.201.241.0 netmask 255.255.255.0
{
option routers 149.201.241.20;
option broadcast-address 149.201.241.255;
option domain-name-servers 149.201.10.30;
option ntp-servers timeserver.rwth-aachen.de;

default-lease-time 600;
max-lease-time 7200;
deny unknown-clients;

}

group
{
include "/etc/dhcp3/hosts.conf";
}
}

Anschließend mit crontab -e einen Minütlichen Cronjob erstellen.
# m h dom mon dow command
* * * * * /usr/local/sbin/dhcp.php

mysql stoppt nicht

Freitag, November 14th, 2008

Ich habe ja alles versucht die Datenbank sauber zu Stoppen. Zunächst habe ich alle wichtigen Dienste angehalten die auf die Datenbank zugreifen.
sudo /etc/init.d/apache2 stop
sudo /etc/init.d/postfix stop

Dann die Datenbank.
sudo /etc/init.d/mysql stop
* Stopping MySQL database server mysqld [fail]

Da das immer im einem Fehler endete musste das halt mit gewallt gehen.
sudo killall mysqld
sudo rm /var/run/mysqld/mysqld.pid
sudo rm /var/run/mysqld/mysqld.sock

mysqld_safe use 100% CPU

Montag, Juni 30th, 2008

Nach der Installation einer MySQL 5.0 DB brauchte der mysqld_safe Prozess 100% CPU.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
4679 root 20 0 1772 532 440 R 98.2 0.2 76:51.07 mysqld_safe

Ein einfache restart des von MySQL reicht aber nicht zum beenden. Ich bin da folgendermaßen vorgegangen:
sudo /etc/init.d/mysql stop
sudo killall mysqld_safe
sudo /etc/init.d/mysql start

Quelle: ubuntuforums.org