Version 1.3 of Slave read-Ahead is available for download. If you don't know what this tool is
about, it is a tool that runs in the background, reads the
incoming replication log on a slave and converts INSERT, UPDATE
and INSERT ... SELECT statements into SELECT statements and
executes these before the statement in question is executed on
the server, the idea being that this will "prewarm" the MySQL
caches for this date, for example the rows that an UPDATE is
affecting will already be in the cache when the UPDATE arrives on
the slave. Because of the way replication data is read, this tool
only works with MySQL5.5 and up.
Version 1.3 introduces the auto-reconnect feature. This will
reconnect to the MySQL server if the connection fails. To be sure
that we restart, all existing connectings are released before a
reconnect attempt is made. This version also has …
Version 1.2 of Slave Readahead is now available for download
here. If you don't know what this little project
is about, it is used to pre-warm the MySQL Cache for the
Replication thread on MySQL slaves.
It is built to support MySQL 5.5 and up only, as it uses some new
commands in MySQL (like the SHOW RELAYLOG EVENTS admin command).
For more information regarding this little project, either read
this blogpost or download the documentation for the project.
/Karlsson
I have been working with MySQL replication for quite a while. I
have dealt with simple replication setups and I have experimented
with complex ones. Five years ago I wrote an article about advanced MySQL replication,
which was mostly a dream on what you could do with imagination
and skill, but the matter from that article is still not even
remotely ready for production. Yet, since that article, I have
been approached by dozens of people who wanted to know how to
make the multiple master dream become reality. To all of them, I
had to say, "sorry, this is just a proof of concept.Come back in
a few years, it may become possible". It still isn't.
Despite its latest great technological advance, MySQL native
replication is is very poor of topologies. What you can do with
MySQL native replication is master-to-slave (which also includes
relayed …
Replication enables data from one MySQL server to be replicated on one or more other MySQL servers. Replication is mostly used as scale-out solution. In such a solution, all writes and updates take place on the master server, while reads take place on one or more slaves. This model is actually known as master-slave replication and this is the kind of replication that I will be setting up in this post.
If you like fresh features, you should not miss this one. MySQL 5.6.2 includes, among other improvements, the implementation of Time delayed replication, a feature that lets you tell the slave not to apply changes from the master immediately, but to wait N seconds. |
The feature is documented in WL#344. (There was a manual online as well
together with the binaries for MySQL 5.6.0, but they were removed
after a few days for a good reason. I am confident that both the
manual and some binaries will eventually show up soon).
Since as of today there are no binaries for MySQL 5.6.x, you need
to get the code and …
Replication as most people know it, has mostly been SQL statement propagation from master to slave. This is known as "statement-based" replication. But there is also another kind of replication that is available, "the row-based replication" and that has quite a lot of benefits. In this post I intend on highlighting the advantages and disadvantages of both the types of replication to help you choose the best one. I also follow up with my own recommendation.
The following quirky dynamic SQL will scan each index of each table so that they’re loaded into the key_buffer (MyISAM) or innodb_buffer_pool (InnoDB). If you also use the PBXT engine which does have a row cache but no clustered primary key, you could also incorporate some full table scans.
To make mysqld execute this on startup, create /var/lib/mysql/initfile.sql and make it be owned by mysql:mysql
SET SESSION group_concat_max_len=100*1024*1024; SELECT GROUP_CONCAT(CONCAT('SELECT COUNT(`',column_name,'`) FROM `',table_schema,'`.`',table_name,'` FORCE INDEX (`',index_name,'`)') SEPARATOR ' UNION ALL ') INTO @sql FROM information_schema.statistics WHERE table_schema NOT IN ('information_schema','mysql') AND seq_in_index = 1; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET SESSION group_concat_max_len=@@group_concat_max_len;
and in my.cnf add a line in the [mysqld] block
init-file = …[Read more]
Warning, the following is quite ugly, but does the job :)
A while back I needed to create an archive slave database from a half a terabyte myisam master and had space restrictions. I could not dump the db, load it, then drop keys (archive doesn’t support keys apart from a primary key on one column as of 5.1), alter engine etc (would take even longer than it took either way). So an ugly single liner came to mind and worked nicely too.
mysqldump -uuser -ppassword -h127.0.0.1 -P3306 dbname
--master-data=1 | sed 's/ENGINE=MyISAM/ENGINE=archive/g' | grep
-v '^ UNIQUE KEY' | grep -v '^ KEY' | perl -p0777i -e
's/,\n^\)/\n\)/mg' | mysql -uuser -ppassword -h127.0.0.1 -P3307
dbname
So what is it doing?
Broken down:
mysqldump -uuser -ppassword -h127.0.0.1 -P3306 dbname
--master-data=1
–> extract the database with the master
position
sed …
We had a one of our slave servers frequently stop replicating with the “Innodb Lock Wait Timeout” error. The slave IO thread would continue to fetch the binlogs while the slave SQL thread kept stopping with the above mentioned error. The teams initial inclination was to change the innodb lock wait timeout variable from 50 secs to a higher value. It was a read-only slave. Our expectation was there would be no competing writes. Then we started listing what are the next steps possible and what could be wrong.
- There could be a user with “super” privilege in the system that was running updates directly on the slave
- A backup script that could be locking the tables out for backup
- Increase the “innodb lock wait timeout variable“
- Enable the innodb lock monitor
While we were working on the system, we noticed that there were few select queries that …
[Read more]Last night at the Boston MySQL User Group I presented on how to get a consistent snapshot to build a slave, how to use mk-table-checksum to check for differences between masters and slaves on an ongoing basis, and how to use tools such as mk-table-sync and mysqldump to sync the data if there are any discrepancies.
The slides are online at http://technocation.org/files/doc/slave_sync.pdf.
The video can be watched on youtube at http://www.youtube.com/watch?v=Un0wqYKmbWY or directly in your browser with the embedded player below: