stop slave;SET GLOBAL sql_slave_skip_counter = 1;start slave;Mieux vaut vérifier à chaque modification: c'est pourquoi on utilise seulement la valeur 1 pour sql_slave_skip_counter.
jeudi 23 octobre 2014
Résoudre les conflits de réplication Mysql
En fonction de la gravité de l'erreur (OK si la donnée existe déjà sur le slave et est rigoureusement identique), on peut bypasser l'erreur. Executer le sql suivant :
Trouver les index non utilisés dans DB2
1) déterminer les id de ts et de table
db2 "SELECT TBSPACEID, TABLEID FROM SYSCAT.TABLES \ WHERE TABSCHEMA = 'schema' AND TABNAME = 'table'";2) déterminer le nombre de scans d'index (champs 8, si = 0 jamais lu)
db2pd -db sbl -tcbstats all tbspaceid=13 tableid=4 | \
grep -p "TCB Index Stats:" | \
awk '{ if ($8 == "0") { print $3} }'
3) il ne reste plus qu'à déterminer le nom des index
db2 "select INDNAME FROM SYSCAT.INDEXES WHERE TABSCHEMA = 'schema' \ AND TABNAME = 'table' AND IID in (liste des ids de l'etape 2)"
statut de DB2 HADR en SQL
$ db2 "select cast(HADR_LOCAL_HOST as varchar(10)) as local, \ cast(HADR_REMOTE_HOST as varchar(10)) as remote, \ cast(DB_NAME as varchar(10)) as db, HADR_STATE, \ HADR_CONNECT_STATUS from SYSIBMADM.SNAPHADR" LOCAL REMOTE DB HADR_STATE HADR_CONNECT_STATUS ---------- ---------- ---------- -------------- ------------------- PROD BACK DATABASE PEER CONNECTED 1 record(s) selected.
jeudi 14 août 2014
Monitoring APC
Sous RHEL, il y a une interface pour monitorer l'activité du cache d'opcode APC.
elle est située dans /usr/share/php-pecl-apc/apc.php
cp /usr/share/php-pecl-apc/apc.php /var/www/html
mercredi 13 août 2014
Réparer une base mysql avec des tables innodb/ibdata corrompues
Pour que cette méthode fonctionne, il faut au moins posséder un dump de la structure de la base, et il faut l'option innodb_file_per_table activée (c'est toujours une bonne habitude de l'activer)
- Copier les fichier IBD dans un endroit sûr, par exemple /home/bob
- Redémarrer la base, en ayant supprimé éventuellement les tablespaces systèmes ibdata1 et ib_logfile avant. attention aux tables InnoDB dans la base Mysql, les recréer au besoin
- Réimporter la structure de la base
- Réimporter les données, et la c'est la partie la plus dure ! il faut exporter les tablespaces que l'on vient de créer et réimporter à la place ceux qu'on a sauvegardé, le tout en redémarrant mysql à chaque action pour être sûr de flusher sur le disque. C'est ce que le script suivant fait:
#! /bin/bash
# superformance.blogspot.com
BKPDIR=/home/bob
USER=root
PASS=pass
DB=db
for table in $(mysql -u ${ROOT} -p${PASS} \
-NBe "select TABLE_NAME from information_schema.TABLES \
where ENGINE='InnoDB' and TABLE_SCHEMA='${DB}';" )
#supprimer le tablespace vide que l'on vient de creer
mysql -u ${ROOT} -p${PASS} \
-NBe "alter table ${table} discard tablespace;"
# arreter mysql
/etc/init.d/mysqld stop
#Copier l'ancien TBS
cp $BKPDIR/$table.ibd /var/lib/mysql/$DB
#demarrer mysql
/etc/init.d/mysqld start
#importer l'ancien tbs
mysql -u ${ROOT} -p${PASS} -NBe \
"alter table ${table} import tablespace;"
/etc/init.d/mysqld restart
done
Ensuite sauvegarder la base avec mysqldump !
mardi 12 août 2014
Générateur de configuration MySQL
2 outils pour générer des configurations MySQL :
https://tools.percona.com/wizard
http://www.fromdual.com/mysql-configuration-file-sample
https://tools.percona.com/wizard
http://www.fromdual.com/mysql-configuration-file-sample
mardi 25 février 2014
Script shell pour afficher le pourcentage de fullscan MySQL
Ce script a pour but de donner une idée de la santé de MySQL (indexation principalement).
Plus le pourcentage est important, plus les requêtes font des lectures sur le disque (pas bien !), on considère qu'il ne faut pas dépasser 20%
Bien sûr les données ne sont valable que lorsqu'il y a un peu de charge sur MYSQL
Plus le pourcentage est important, plus les requêtes font des lectures sur le disque (pas bien !), on considère qu'il ne faut pas dépasser 20%
Bien sûr les données ne sont valable que lorsqu'il y a un peu de charge sur MYSQL
#! /bin/bash
# superformance.blogspot.com
USER=root
PASS=pass
DB=db
TEMP_FILE=/tmp/$$.tmp
trap "rm $TEMP_FILE; exit" SIGHUP SIGINT SIGTERM
SOCK=/var/lib/mysqlmysql.sock
L_Handler_read_rnd_next=0
L_Handler_read_rnd=0
L_Handler_read_first=0
L_Handler_read_next=0
L_Handler_read_key=0
L_Handler_read_prev=0
while true; do
# fullscan percentage
mysql -u ${USER} -p${PASS} --connect-timeout=5 -NBe \
"show global status like 'handler%'" > /tmp/$$.tmp
V_Handler_read_rnd_next=$(grep -E -w \
"Handler_read_rnd_next" /tmp/$$.tmp | awk '{print $2}')
V_Handler_read_rnd=$(grep -E -w \
"Handler_read_rnd" /tmp/$$.tmp | awk '{print $2}')
V_Handler_read_first=$(grep -E -w \
"Handler_read_first" /tmp/$$.tmp | awk '{print $2}')
V_Handler_read_next=$(grep -E -w \
"Handler_read_next" /tmp/$$.tmp | awk '{print $2}')
V_Handler_read_key=$(grep -E -w \
"Handler_read_key" /tmp/$$.tmp | awk '{print $2}')
V_Handler_read_prev=$(grep -E -w \
"Handler_read_prev" /tmp/$$.tmp | awk '{print $2}')
Handler_read_rnd_next=$(echo "$V_Handler_read_rnd_next - \
$L_Handler_read_rnd_next" | bc)
Handler_read_rnd=$(echo "$V_Handler_read_rnd - \
$L_Handler_read_rnd" | bc)
Handler_read_first=$(echo "$V_Handler_read_first - \
$L_Handler_read_first" | bc)
Handler_read_next=$(echo "$V_Handler_read_next - \
$L_Handler_read_next" | bc)
Handler_read_key=$(echo "$V_Handler_read_key - \
$L_Handler_read_key" | bc)
Handler_read_prev=$(echo "$V_Handler_read_prev - \
$L_Handler_read_prev" | bc)
div=$( echo "$Handler_read_rnd_next + $Handler_read_rnd + \
$Handler_read_first + $Handler_read_next + \
$Handler_read_key + $Handler_read_prev" | bc)
if [ $div == 0 ]; then
echo "0%"
else
echo $( echo "scale=2;(($Handler_read_rnd_next + \
$Handler_read_rnd) / $div)* 100" | bc -l )"%"
fi
L_Handler_read_rnd_next=$V_Handler_read_rnd_next
L_Handler_read_rnd=$V_Handler_read_rnd
L_Handler_read_first=$V_Handler_read_first
L_Handler_read_next=$V_Handler_read_next
L_Handler_read_key=$V_Handler_read_key
L_Handler_read_prev=$V_Handler_read_prev
unset V_Handler_read_rnd_next
unset V_Handler_read_rnd
unset V_Handler_read_first
unset V_Handler_read_next
unset V_Handler_read_key
unset V_Handler_read_prev
sleep 5
done
dimanche 9 février 2014
jeudi 9 janvier 2014
Charger des données d'une instance DB2 à une autre sans (gros) fichier
on utilisera 3 pour cela 3 sessions SSH, testé avec 30 Go de données, mais doit pouvoir aller plus loin
session 1
session 1
mkfifo -m 777 /tmp/input mkfifo -m 777 /tmp/outputsession 2
db2 connect to base1 db2 "export to /tmp/input of ixf select * from matable"session 3
db2 connect to base2 db2 "load from /tmp/output of ixf replace into matable nonrecoverable"retour à la session 1
cat /tmp/input > /tmp/output
vendredi 3 janvier 2014
Erreur PHP Startup: Unable to load dynamic library
L'erreur complète est la suivante :
PHP Warning: PHP Startup: Unable to load dynamic library 'XXX' - XXX: undefined symbol: php_pdo_register_driver in Unknown on line 0
La solution est toute bête, le driver PDO qu'on cherche à lancer est simplement démarré avant PDO lui même ! Il faut donc modifier l'ordre de chargement des extensions PHP, ensuite plus de soucis !
jeudi 2 janvier 2014
Comment compiler le module PDO_IBM pour PHP (RHEL/Fedora)
Prérequis
- Avoir déja installé le driver db2 voir ici
- Télécharger les sources PDO_IBM-1.3.3 sur http://pecl.php.net/package/PDO_IBM
Etape 1: compiler le module
tar -zxf /tmp/PDO_IBM-1.3.3.tgz cd PDO_IBM-1.3.3/ phpize --clean phpize cp /opt/IBM/dsdriver/include/* . ./configure --with-pdo-ibm=/opt/IBM/dsdriver/lib make sudo make install
Etape 2: Installer le module
echo "extension=pdo_ibm.so" > /etc/php.d/pdo_ibm.ini
Etape 3: Tester !
<?php
$database = 'test';
$user = 'test';
$password = 'test';
$hostname = 'localhost';
$port = 50000;
$string= sprintf("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=%s;HOSTNAME=%s;PORT=%d;PROTOCOL=TCPIP;",
$database ,
$hostname ,
$port);
try {
$connection = new PDO(
$string,$user,$password);
$req=$connection->query("select * from table");
foreach ($req as $row) {
print_r($row);
}
}
catch (Exception $e) {
echo($e->getMessage());
}
?>
Comment compiler le module db2_ibm pour PHP (RHEL/Fedora)
Prérequis
- télécharger le fichier ibm_data_server_driver_package_linuxx64_v10.5.tar.gz depuis le site IBM
- télécharger les sources du module sur http://pecl.php.net/package/ibm_db2
- avoir installé php-devel (yum install php-devel)
- avoir installé le korn shell (yum install ksh)
Etape 1 : Installer le driver DB2
mkdir -pv /opt/IBM;cd /opt/IBM;tar -zxf /tmp/ibm_data_server_driver_package_linuxx64_v10.5.tar.gz chmod 755 /opt/IBM/dsdriver/installDSDriver ksh installDSDriver
Etape 2 : Compiler le module
tar -zxvf ibm_db2-1.9.5.tgz; cd ibm_db2-1.9.5 phpize export IBM_DB_HOME=/opt/IBM/dsdriver/ ./configure make sudo make install
Etape 3 : Installer le module
echo "; Enable ibm_db2 extension module" > /etc/php.d/ibm_db2.ini echo "extension=ibm_db2.so" >> /etc/php.d/ibm_db2.ini service httpd restart
Etape 4 : Test !
<?php
$database = 'test';
$user = 'test';
$password = 'test';
$hostname = 'localhost';
$port = 50000;
$conn_string = "DRIVER={IBM DB2 ODBC DRIVER};DATABASE=$database;" .
"HOSTNAME=$hostname;PORT=$port;PROTOCOL=TCPIP;UID=$user;PWD=$password;";
$conn = db2_connect($conn_string, '', '');
if ($conn) {
echo "Connexion résie.";
db2_close($conn);
}
else {
echo "Connexion éoué";
}
?>
Inscription à :
Articles (Atom)