<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Enjoying Rails &#187; MySQL</title>
	<atom:link href="http://blog.erichsen.net/tag/mysql/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.erichsen.net</link>
	<description>I really do...</description>
	<lastBuildDate>Sun, 08 May 2011 07:35:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='blog.erichsen.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Enjoying Rails &#187; MySQL</title>
		<link>http://blog.erichsen.net</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://blog.erichsen.net/osd.xml" title="Enjoying Rails" />
	<atom:link rel='hub' href='http://blog.erichsen.net/?pushpress=hub'/>
		<item>
		<title>Multiple MySQL slave instances on a single server</title>
		<link>http://blog.erichsen.net/2009/09/01/multiple-mysql-slave-instances-on-a-single-server/</link>
		<comments>http://blog.erichsen.net/2009/09/01/multiple-mysql-slave-instances-on-a-single-server/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 07:47:34 +0000</pubDate>
		<dc:creator>enjoyingrails</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.erichsen.net/?p=27</guid>
		<description><![CDATA[Just had this scenario: Servers A, B, and C each running a different rails app using a MySQL DB installed locally on each server. Had server D that should work as a slave for each of the DBs in order to have an up-to-date copy of the DBs in case of a HD crash. The backups of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.erichsen.net&amp;blog=1936559&amp;post=27&amp;subd=enjoyingrails&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just had this scenario:</p>
<p>Servers A, B, and C each running a different rails app using a MySQL DB installed locally on each server. Had server D that should work as a slave for each of the DBs in order to have an up-to-date copy of the DBs in case of a HD crash. The backups of the DBs are also performed from the slave in order to avoid the locking of the DB on the prod servers in connection with the mysqldump command.</p>
<p>So how do we do that?</p>
<p>First step is to be able to run multiple MySQL instances on server D.</p>
<p>Seems that the preferred way to do this with MySQL 5.0 is to use the MySQL Instance Manager.<br />
Unfortunately, the <code>/etc/init.d/mysql</code> script you get when installing MySQL on Ubuntu using<br />
apt-get does not use the MySQL instance manager.</p>
<p>So I installed from source:<br />
<code>wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.85.tar.gz/from/http://mirrors.dotsrc.org/mysql/<br />
tar xvzf mysql-5.0.85.tar.gz<br />
cd mysql-5.0.85/<br />
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \<br />
-fno-exceptions -fno-rtti" ./configure \<br />
--prefix=/usr/local/mysql --enable-assembler \<br />
--with-mysqld-ldflags=-all-static<br />
make<br />
sudo make install<br />
</code><br />
Setup some symlinks<br />
<code>sudo ln -s /usr/local/mysql/bin/mysql /usr/local/bin<br />
sudo ln -s /usr/local/mysql/bin/mysqldump /usr/local/bin<br />
sudo ln -s /usr/local/mysql/libexec/mysqlmanager /usr/local/sbin<br />
</code><br />
Installed the <code>/etc/init.d/mysql</code> script and made it use the MySQL Instance Manager<br />
<code>sudo sh -c "sed 's/use_mysqld_safe=1/use_mysqld_safe=0/' support-files/mysql.server &gt; /etc/init.d/mysql"<br />
sudo chmod 755 /etc/init.d/mysql<br />
sudo update-rc.d mysql defaults<br />
</code><br />
Installed the MySQL configuration file. Note that this lives in <code>/etc/my.cnf</code> and _not_ in <code>/etc/mysql/my.cnf</code><br />
<code>sudo cp support-files/my-large.cnf /etc/my.cnf<br />
</code><br />
Added the following to the top of <code>/etc/my.cnf</code><br />
<code>[manager]<br />
socket                          = /var/lib/mysql/manager.sock<br />
pid-file                        = /var/run/mysql/manager.pid<br />
password-file                   = /etc/mysqlmanager.passwd<br />
monitoring-interval             = 3600<br />
user                            = mysql<br />
log                             = /var/log/mysql/mysql-man.log<br />
run-as-service</code></p>
<p><code> </code></p>
<p><code>[mysql.server]<br />
use-manager<br />
</code><br />
Create the mysql user and the necessary directories<br />
<code>sudo groupadd mysql<br />
sudo useradd -g mysql mysql<br />
sudo mkdir -p /var/lib/mysql /var/run/mysql /var/log/mysql<br />
sudo chown mysql:mysql /var/lib/mysql /var/run/mysql /var/log/mysql<br />
</code><br />
Create the mysqlmanager password<br />
<code>sudo sh -c "mysqlmanager --passwd &gt; /etc/mysqlmanager.passwd"<br />
sudo chown mysql:mysql /etc/mysqlmanager.passwd<br />
sudo chmod 600 /etc/mysqlmanager.passwd<br />
</code><br />
Create the data directories<br />
<code>sudo /usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var/data<br />
sudo /usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var/data1<br />
sudo /usr/local/mysql/bin/mysql_install_db --user=mysql --datadir=/usr/local/mysql/var/data2<br />
</code><br />
Replace the <code>[mysqld]</code> section in <code>/etc/my.cnf</code> with the following:<br />
<code>[mysqld]<br />
datadir=/usr/local/mysql/var/data<br />
port            = 3306<br />
socket          = /tmp/mysql.sock<br />
log-bin=mysql-bin<br />
server-id       = 10<br />
relay_log = mysql-relay-bin<br />
log_slave_updates = 1</code></p>
<p><code>[mysqld1]<br />
datadir=/usr/local/mysql/var/data1<br />
port            = 3307<br />
socket          = /tmp/mysql1.sock<br />
log-bin=mysql-bin<br />
server-id       = 11<br />
relay_log = mysql-relay-bin<br />
log_slave_updates = 1</code><br />
<code> </code><br />
<code>[mysqld2]<br />
datadir=/usr/local/mysql/var/data2<br />
port            = 3308<br />
socket          = /tmp/mysql2.sock<br />
log-bin=mysql-bin<br />
server-id       = 12<br />
relay_log = mysql-relay-bin<br />
log_slave_updates = 1<br />
</code><br />
Start the MySQL server<br />
<code>sudo /etc/init.d/mysql start<br />
</code><br />
Connect to the MySQL Instance Manager<br />
<code>mysql -u root --socket=/var/lib/mysql/manager.sock -p<br />
</code><br />
<code>mysql&gt; show instances;<br />
+---------------+--------+<br />
| instance_name | status |<br />
+---------------+--------+<br />
| mysqld        | online |<br />
| mysqld2       | online |<br />
| mysqld1       | online |<br />
+---------------+--------+<br />
</code></p>
<p>Yay!</p>
<p>Exit and connect to the MySQL DB running on port 3308:<br />
<code>mysql -u root -P 3308 -h 127.0.0.1<br />
</code>Note that you need to specify the host (-h) option. Otherwise, the mysql command will ignore the port option and just connect to the default instance running on port 3306.</p>
<p>I will make a followup post on how to setup the actual replication. Hope someone finds this useful <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/enjoyingrails.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/enjoyingrails.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/enjoyingrails.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/enjoyingrails.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/enjoyingrails.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/enjoyingrails.wordpress.com/27/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/enjoyingrails.wordpress.com/27/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/enjoyingrails.wordpress.com/27/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=blog.erichsen.net&amp;blog=1936559&amp;post=27&amp;subd=enjoyingrails&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://blog.erichsen.net/2009/09/01/multiple-mysql-slave-instances-on-a-single-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/2047f0076ea63c7d1a35373bac6f9841?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">enjoyingrails</media:title>
		</media:content>
	</item>
	</channel>
</rss>
