[LØST] Bash script problemer
Hejsa.
Jeg skal lave et script der udgør følgende - skal laves i Bash
1. tjekker et bibliotek for den nyeste fil med navn mysql-bin.XXXXXX <-- hvor XXX er et tal
2. Det tal der står efter . i filnavnet skal plusses med 1 - dvs hvis filen hedder mysql-bin.000022 - skal den komme ud med tallet 000023
Det er for at lave en automatiseret MySQL repair af binlog/replikering - således hvis maskinen stopper uhensigtsmæssigt - så starter den op og reparerer replikeringschannel.
Hvordan kan jeg nemmest lave dette i bash ?
Jeg tænker noget i den stil
Jeg skal lave et script der udgør følgende - skal laves i Bash
1. tjekker et bibliotek for den nyeste fil med navn mysql-bin.XXXXXX <-- hvor XXX er et tal
2. Det tal der står efter . i filnavnet skal plusses med 1 - dvs hvis filen hedder mysql-bin.000022 - skal den komme ud med tallet 000023
Det er for at lave en automatiseret MySQL repair af binlog/replikering - således hvis maskinen stopper uhensigtsmæssigt - så starter den op og reparerer replikeringschannel.
Hvordan kan jeg nemmest lave dette i bash ?
Jeg tænker noget i den stil
OUTPUT=`find mysql-* -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1`
NEW=`echo $OUTPUT | rev | cut -d'.' -f 1 | rev `
echo $OUTPUT --> Giver mysql-bin.000022
echo $NEW --> Giver 000022
echo "$DATE - finding the last binlog file"
$NEW=`$NEW + 1`
echo $NEW --> giver stadig 000022
Hvor det skulle være 000023 istedet for som den sidste.
Hvordan kan jeg lave dette ?
Kommentarer4
Prøv at udskifte din 6.
let NEW="$(($NEW + 1))"
Hej Ejvind.
Testet og det
Testet og det fungerer ikke
mysql-bin.000022
000022
06:57:15: - finding the last binlog file
19 <-- Output af $NEW
Virker dette bedre? (jeg
OUTPUT=`find mysql-* -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1`
NEW=`echo $OUTPUT | rev | cut -d'.' -f 1 | rev `
echo $OUTPUT
echo $NEW
echo "$DATE - finding the last binlog file"
NEW=`printf %06d $((10#$NEW+1))`
echo $NEW
Hej Ejvind.
Jeg opdagede
Jeg opdagede lige at jeg har lavet en fejl/ setup er forkert.
Kort beskrivelse:
SRV01 <-- MySQL server 1 - replikerer SRV02
SRV02 <-- MySQL server 2 - replikerer SRV01
Derfor er det egenligt binlog filen på den Server jeg ønsker navnet på.
Derfor har jeg nu lavet det på følgende måde
Script 1
Kaldes fra SRV02
HOST=192.168.0.16
DB=TestSetup
CHANNEL=testb
DATE="`date +%D_%R:%S`:"
LOG=/var/log/$DATE-replcheck.log
# Starting script
echo "$DATE Moving to MySQL Dir" >> $LOG
cd /var/lib/mysql
echo "$DATE searching for newest Mysql-bin file" >> $LOG
OUTPUT=`ssh $HOST /script/binlog.sh`
FILE=`echo $OUTPUT | rev | cut -d'/' -f 1 | rev `
echo "Newest binlog file from $HOST is: $FILE"
echo "$DATE - Stop, edit and restart MySQL Replication Channel"
mysql -u root -pXXXXX -e "stop slave for channel '$CHANNEL';"
mysql -u root -pXXXXX -e "CHANGE MASTER TO MASTER_LOG_FILE='$FILE',MASTER_LOG_POS=0 for channel '$CHANNEL';"
mysql -u root -pXXXXX -e "start slave for channel '$CHANNEL';"
echo "$DATE Replicationchannel changed" >> $LOG
Scriptet der kaldes fra SRV02 på SRV01:
# Static param
find /var/lib/mysql/mysql-* -type f -printf "%T@ %p\n" | sort -n | cut -d' ' -f 2- | tail -n 1
Sådanne har jeg fået løst problemet således den automatisk retter Replikeringschannel til