[LØST] Bash script problemer

peque
Antal: 834
Tilmeldt:
20-04-2005
User is offline
[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

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 ?


ejvindh
Antal: 10
Tilmeldt:
17-05-2010
User is offline
Prøv at udskifte din 6.

Prøv at udskifte din 6. kodelinie med følgende:
let NEW="$(($NEW + 1))"


peque
Antal: 834
Tilmeldt:
20-04-2005
User is offline
Hej Ejvind. Testet og det

Hej Ejvind.
Testet og det fungerer ikke

mysql-bin.000022
000022
06:57:15: - finding the last binlog file
19  <-- Output af $NEW

ejvindh
Antal: 10
Tilmeldt:
17-05-2010
User is offline
Virker dette bedre? (jeg

Virker dette bedre? (jeg antager at du gerne vil have det ud med de foranstillede '0'-er?)

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

peque
Antal: 834
Tilmeldt:
20-04-2005
User is offline
Hej Ejvind. Jeg opdagede

Hej Ejvind.
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