public inbox for gentoo-dev@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-dev] guide/howto switching to slotted MySQL
@ 2006-01-23  1:06 Francesco Riosa
  2006-01-23  2:33 ` Chris White
  0 siblings, 1 reply; 3+ messages in thread
From: Francesco Riosa @ 2006-01-23  1:06 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 517 bytes --]

Here there is a guide on howto switch to the slotted versions of MySQL.
It's a first draft and to be totally usable some repoman commit are needed.

After the mentioned commits and the needed corrections to the guide
4.1.16 , 5.0.17 and 5.0.18 (all marked unstable) will be removed.

At the same time slotted MySQL will acquire keywording actually owned by
 the removed counterparts.

The stabling of MySQL 5.0 will be retarded from 2005-02-15 to 30 days
after the slotted packages keywording.

regards,
Francesco R.

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: mysql-upgrading.xml --]
[-- Type: text/xml; name="mysql-upgrading.xml", Size: 8034 bytes --]

<?xml version='1.0' encoding="UTF-8"?>
<!DOCTYPE guide SYSTEM "/dtd/guide.dtd">
<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/mysql-upgrading.xml,v 1.7 2006/01/04 11:26:16 neysx Exp $ -->

<guide link="/doc/en/mysql-upgrading.xml">
<!-- http://localhost:8008/doc/en/mysql-upgrading.xml -->
<title>MySQL, upgrade and switch to slotted guide</title>

<author title="Author">
	<mail link="vivo@gentoo.org">Francesco Riosa</mail>
</author>

<abstract>
Here described there is an upgrade path for MySQL databases as painless as
possible.
</abstract>

<!-- The content of this document is licensed under the CC-BY-SA license -->
<!-- See http://creativecommons.org/licenses/by-sa/2.5 -->
<license/>

<version>1.6</version>
<date>2006-01-04</date>

<chapter>
<title>Upgrading from old versions of MySQL</title>
<section>
<body>

<p>
This document cover how to upgrade to the latest version available.
There are currently three version of MySQL supported in portage:

<ul>
	<li>5.0 Follow upstream schedule (stable tree, active bugfixing)</li>
	<li>4.1 Follow upstream schedule (only changes to a large userbase)</li>
	<li>4.0 Security fix only</li>
</ul>

There are two additional version presently, but are currently unsupported
meaning that bug reports have very low priority any may lack functionalities.<br />
The current document is not guaranteed to work with them.

<ul>
	<li>3.23 ancient</li>
	<li>5.1 active development</li>
</ul>
</p>

<note>
	The present document will use mysql-4.0.26 as start point
	and mysql-5.0.18-r30 as the target version<br />
	Replace any of these with your own.
</note>

</body>
</section>
</chapter>


<chapter id="install_the_new_version">
<title>Install the new version</title>
<section>
<body>

<p>
	This step require to (re)move some files from the running environment,
	so the first thing to do is a backup of the running database server,
	(still not the data).<br />
	Done that, it's possible to remove the conflicting files with the
	slotted MySQL, and install the new version side by side with
	the current one.
</p>

<pre caption="Backup old package and prepare installation">
# <i>quickpkg dev-db/mysql</i>
# <i>rm -rf /usr/include/mysql /usr/bin/mysql_config</i>
# <i>for tmpfile in  /usr/lib/*mysql* ; do</i>
  <i>    mv "${tmpfile}" "${tmpfile}.TMP"</i>
  <i>    ln -s "${tmpfile}.TMP" "${tmpfile}"</i>
  <i>done</i>
# <i>emerge -av =dev-db/mysql-5.0.18-r30</i>
</pre>

<p>
Be sure to update the /etc/init.d/mysql startup script with
etc-update or dispatch-conf.
</p>

</body>
</section>
</chapter>

<chapter>
<title>Copy the data to the newly installed server</title>
<section>
<body>

<p>
Lets go to to dump the data, this will be imported in the new version of
mysql.<br />
We are going to use mysqldump from the <b>slotted</b> MySQL.<br />
Notice the "<b>-500</b>" suffix to the mysqldump program name, it's from
the <b>5.0</b>.x version.
</p>

<pre caption="Dump of all databases">
# <i>mysqldump-500 \</i>
  <i>--defaults-file=/etc/mysql/my.cnf</i>
  <i>-uroot \</i>
  <i>--password=</i><comment>'your_password'</comment><i> \</i>
  <i>-hlocalhost \</i>
  <i>--all-databases \</i>
  <i>--opt \</i>
  <i>--allow-keywords \</i>
  <i>--flush-logs \</i>
  <i>--hex-blob \</i>
  <i>--master-data \</i>
  <i>--max_allowed_packet=16M \</i>
  <i>--quote-names \</i>
  <i>--result-file=BACKUP_MYSQL_4.0.SQL</i>
</pre>

<p>
Now a file named <path>BACKUP_MYSQL_4.0.SQL</path> exist, which can be
used to recreate your data. The data is described in the MySQL dialect of SQL,
the Structured Query Language.
</p>

<p>
start the server without networking and user management
and run the SQL script:
</p>

<pre caption="Load data">
# <i>mv /etc/conf.d/mysql /etc/conf.d/mysql.orig</i>
# <i>echo '</i>
  <i>NOCHECK=1</i>
  <i>DEBUG=3</i>
  <i>mysql_slot_500=(</i>
  <i>  "skip-networking"</i>
  <i>  "skip-grant-tables"</i>
  <i>)</i>
  <i>' > /etc/conf.d/mysql</i>
# <i>/etc/init.d/mysql-500 start</i>
# <i>mysql-500 --defaults-file=/etc/mysql-500/my.cnf &lt; BACKUP_MYSQL_4.0.SQL</i>
# <i>mv /etc/conf.d/mysql.orig /etc/conf.d/mysql</i>
# <i>/etc/init.d/mysql-500 stop</i>
</pre>

<note>
	To convert the data to UTF-8 during this step you MUST remove "--hex-blob"
	from the mysqldump option, then filter the data through a converter like
	"iconv".<br />
	In most case this is done simply "piping" it like this:<br />
	"iconv -f ISO_8859-1 -t UTF8 BACKUP_MYSQL_4.0.SQL
	| mysql-500 --defaults-file=/etc/mysql-500/my.cnf"<br />
	Also manual tweaking of the SQL file could be needed, depending on the
	structure and the data contained in it.
</note>

<note>
	If there are applications still <comment>writing</comment> to the previous
	database, it's possible to setup a "Replication" relationship between the
	two databases, however this will not be covered here.
</note>

</body>
</section>
</chapter>


<chapter>
<title>Switch to the new server</title>
<section>
<body>
<p>If you need to be sure that applications are working with the newly
installed server, please test them against it, quite every application
has configuration settings to chose which port or socket to use to connect
to the database server.<br />
Simply start the server on an alternate port (for example 3307) and tell your
application or a test copy of it to connect with those parameters.<br />
Pay attention that most of them will try to use the parameters found in the
"[client]" section of /etc/mysql/my.cnf config file.<br/>
</p>

<p>
When you're satisfied with the results, remove every testing setting,
stop the old server and start the new one.<br />
Also make it the server that will start at next reboot.
</p>

<pre caption="Use the new server">
# <i>rc-update del mysql default</i>
# <i>rc-update add mysql-500 default</i>
# <i>/etc/init.d/mysql stop</i>
# <i>/etc/init.d/mysql-500 start</i>
</pre>

<p>
unmerge the old version, and make the new one the default.
The unmerge command will be unable to remove some files, the ones moved in
<uri link="#install_the_new_version">Backup old package and prepare installation</uri>
This is an intended behavior, and avoid breaking application linked to the
old MySQL version.
</p>

<pre caption="cleanup first step">
# <i>emerge --unmerge --pretend mysql</i>
# <i>emerge --unmerge "=dev-db/mysql-4.0.26"</i>
# <i>cd /etc</i>
# <i>mv mysql mysql.$(date +%F_%H-%M)</i>
# <i>eselect mysql list</i>
# <i>eselect mysql set 1</i>
# <i>eselect mysql show</i>
</pre>

</body>
</section>
</chapter>


<chapter>
<title>Rebuild applications</title>
<section>
<body>

<p>
After you got rid of your old MySQL installation, you can now install the new
version. Note that <c>revdep-rebuild</c> is necessary for rebuilding packages
linking against MySQL.
</p>

<pre caption="Reverse dependancies rebuild">
# <i>revdep-rebuild --soname libmysqlclient.so.12 -- -p -v</i>
# <i>revdep-rebuild --soname libmysqlclient.so.12</i>
</pre>

<note>
Depending on which really is the old version libmysqlclient.so number may
be 10, 12, 14 or 15, chose the one of the <comment>old</comment> package.
</note>

</body>
</section>
</chapter>


<chapter>
<title>Final touches</title>
<section>
<body>

<pre caption="Upgrading user database">
# <i>mysql_fix_privilege_tables-500 \</i>
     <i>--defaults-file=/etc/mysql-500/my.cnf \</i>
     <i>--user=root \</i>
     <i>--password=</i><comment>'your_password'</comment><i></i>
# <i>mysql -uroot -p</i><comment>'your_password'</comment><i> mysql -e "FLUSH PRIVILEGES;"</i>
# <i>for tbl in $( mysql --silent -uroot -p</i><comment>'your_password'</comment><i> -e 'USE mysql ; SHOW TABLES LIKE "help%";' )</i>
  <i>do</i>
    <i>mysql -uroot -p</i><comment>'your_password'</comment><i> -e "use mysql ; TRUNCATE TABLE ${tbl};"</i>
  <i>done</i>
# <i>mysql -uroot -p</i><comment>'your_password'</comment><i> mysql &lt; /usr/share/mysql/fill_help_tables.sql</i>
</pre>

<p>
If you encountered any problems during the upgrade process, please report them
at our <uri link="https://bugs.gentoo.org">Bugzilla</uri>.
</p>

</body>
</section>
</chapter>

</guide>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gentoo-dev] guide/howto switching to slotted MySQL
  2006-01-23  1:06 [gentoo-dev] guide/howto switching to slotted MySQL Francesco Riosa
@ 2006-01-23  2:33 ` Chris White
  2006-01-24 19:59   ` Francesco Riosa
  0 siblings, 1 reply; 3+ messages in thread
From: Chris White @ 2006-01-23  2:33 UTC (permalink / raw
  To: gentoo-dev

[-- Attachment #1: Type: text/plain, Size: 352 bytes --]

On Monday 23 January 2006 10:06, Francesco Riosa wrote:
> Here there is a guide on howto switch to the slotted versions of MySQL.
> It's a first draft and to be totally usable some repoman commit are needed.

You're probably better of putting this in bugzilla and assigning to the docs 
team. Please cc me as when you do make one.

Chris White

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [gentoo-dev] guide/howto switching to slotted MySQL
  2006-01-23  2:33 ` Chris White
@ 2006-01-24 19:59   ` Francesco Riosa
  0 siblings, 0 replies; 3+ messages in thread
From: Francesco Riosa @ 2006-01-24 19:59 UTC (permalink / raw
  To: gentoo-dev

Chris White wrote:
> On Monday 23 January 2006 10:06, Francesco Riosa wrote:
>> Here there is a guide on howto switch to the slotted versions of MySQL.
>> It's a first draft and to be totally usable some repoman commit are needed.
> 
> You're probably better of putting this in bugzilla and assigning to the docs 
> team. Please cc me as when you do make one.
> 
> Chris White

bug #120210, assigned and cc-ed :-)
-- 
gentoo-dev@gentoo.org mailing list



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2006-01-24 20:03 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-23  1:06 [gentoo-dev] guide/howto switching to slotted MySQL Francesco Riosa
2006-01-23  2:33 ` Chris White
2006-01-24 19:59   ` Francesco Riosa

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox