[ale] MySQL sync

cfowler cfowler at outpostsentinel.com
Fri Feb 21 09:07:58 EST 2003


Chuck,

Does this make the whole server a slave or just the database?

Chris

On Thu, 2003-02-20 at 08:30, Chuck Huber wrote:
> On Wed, Feb 19, 2003 at 04:24:22PM -0500, cfowler wrote:
> > I've got 2 MySQL engines on seperate networks.  Is it possible to sync
> > certain databases for backup purposes?
> 
> Yes it is possible with 3.x and I'm doing it right now.
> You need to setup replication as a master slave.  I use stunnel
> to create an encrypted link between the master and slave.  The slave
> network is protected by a firewall, and I use iptables to forward the
> port to the slave host's stunnel port.  MySql.com has some good docs
> on this.  But in a nutshell, here's how to do it:
> 
> The "master" database is defined to be the source of information.
> The "slave" is defined to be the recipient - the one that tries to
> keep up with the master.
> 
> MASTER SETUP:
> For the purposes of this discussion, the master will listen for
> connections on TCP port 1234.  In /etc/my.cnf make sure the [mysqld] section
> contains the following parameters:
> 
>     [mysqld]
>     port=1234
>     ...
>     log-bin
>     server-id=1
> 
> Add a user of your choice that has read and FILE access to all the databases
> you wish to backup.  For this purposes of this discussion, we'll call it
> "repluser".
> 
> After you set these parameters, you'll need to bounce the mysql server.
> 
> We'll need to setup a stunnel to listen.  In /etc/rc.d/init.d/mysql
> setup a stunnel listener.  For the purposes of this discussion, we'll use 1235:
> 
>     #!/bin/sh
>     #
>     # Establish a secure tunnel for mysql.  This will listen
>     # on port 1235 for SSL connections, then forward them to
>     # port 1234.  The firewall has been setup to allow only
>     # the slave machine to hit port 1235 and it forwards the
>     # connection request to this machine.
>     #
>     case "$1" in
>         'start')
>             # Start the SSL tunnel
>             /usr/sbin/stunnel -s mysql -d 1235 -r localhost:1234
>             ;;
>         'stop')
>             # Stop the SSL tunnel
>             kill $(cat /var/run/stunnel.localhost.1234.pid)
>             ;;
>     esac
> 
>     #
>     #  Change to user mysql and execute the startup script
>     #
>     su - mysql -c "./rc $*"
> 
> FIREWALL SETUP
> Since the slave will be initiating contact with the master, we'll need
> to forward the connection request at the firewall to this master machine.
> We'll want to forward the encrypted link since stunnel is already running
> on the master.  Substitute in the IP address of the master.
> 
>     ${IPTABLES} -t nat -A PREROUTING -p tcp --dport 1235 -j DNAT --to-destination 192.168.?.?:1235
> 
> SLAVE SETUP
> Setup stunnel.  In /etc/rc.d/init.d/mysql, add:
>     ...
>     case "$1" in
>         'start')
>             # -c = SSL Client mode.  Remote end is server
>             # -s = suid after connecting
>             # -d = daemon listen address/port
>             # -r = remote list
>             /usr/sbin/stunnel -c \
>                 -s mysql \
>                 -d 1235 \
>                 -r remotehost.domain.com:1235
>             ;;
>         'stop')
>             kill $(cat /var/run/stunnel.remotehost.domain.com.1235.pid)
>             ;;
>     esac
>     su - mysql -c "~mysql/mysql.server $*"
> 
> Setup mysql.  In ~mysql/.my.cnf (or /etc/my.cnf), add the following parameters:
> 
>     [mysqld]
>     port=1234
>     ...
>     master-host=127.0.0.1
>     master-port=1235
>     master-user=repluser
>     master-password=replpassword
>     replicate-do-db=dbtorepl
>     service-id=3
> 
> Set the master-user and master-password appropriate for your system.  Also set
> replicate-do-db to the database you wish to replicate.
> NOTE: Don't use "localhost".  That has special meaning to mysqld and will cause
> it to use unix sockets to connect to /tmp/mysql (a pipe).  It must be 127.0.0.1.
> 
> Make sure ~mysql/data/master.info looks like:
>     sched-bin.003
>     1
>     127.0.0.1
>     repluser
>     replpassword
>     1235
>     60
> 
> There are mysql commands you can use to adjust these parameters, but this will
> give you a good start.
> 
> Bounce the slave server and use tcpdump to look for connections going to 
> 127.0.0.1:1235, and watch the mysql logs for errors.
> 
> Enjoy,
>     - Chuck
> 
> -- 
> "The purpose of encryption is to protect good people
> from bad people, not to protect bad people from the government."
>      Scott McNealy, CEO Sun Microsystems
> "The best way for government to control people is to remain in
>    a constant threat of war." ---Karl Marx
> "They that can give up essential liberty to obtain a little temporary
>    safety deserve neither liberty nor safety." -- Benjamin Franklin


_______________________________________________
Ale mailing list
Ale at ale.org
http://www.ale.org/mailman/listinfo/ale






More information about the Ale mailing list