neysx 06/03/10 23:09:26 Modified: mysql-upgrade-slotted.xml Log: #125599 Unslotting slotted Mysql
Revision Changes Path 1.10 xml/htdocs/doc/en/mysql-upgrade-slotted.xml file : http://www.gentoo.org/cgi-bin/viewcvs.cgi/xml/htdocs/doc/en/mysql-upgrade-slotted.xml?rev=1.10&content-type=text/x-cvsweb-markup&cvsroot=gentoo plain: http://www.gentoo.org/cgi-bin/viewcvs.cgi/xml/htdocs/doc/en/mysql-upgrade-slotted.xml?rev=1.10&content-type=text/plain&cvsroot=gentoo diff : http://www.gentoo.org/cgi-bin/viewcvs.cgi/xml/htdocs/doc/en/mysql-upgrade-slotted.xml.diff?r1=1.9&r2=1.10&cvsroot=gentoo Index: mysql-upgrade-slotted.xml =================================================================== RCS file: /var/cvsroot/gentoo/xml/htdocs/doc/en/mysql-upgrade-slotted.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- mysql-upgrade-slotted.xml 17 Feb 2006 19:01:06 -0000 1.9 +++ mysql-upgrade-slotted.xml 10 Mar 2006 23:09:26 -0000 1.10 @@ -1,306 +1,96 @@ <?xml version='1.0' encoding="UTF-8"?> <!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> -<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/mysql-upgrade-slotted.xml,v 1.9 2006/02/17 19:01:06 nightmorph Exp $ --> +<!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/mysql-upgrade-slotted.xml,v 1.10 2006/03/10 23:09:26 neysx Exp $ --> <guide link="/doc/en/mysql-upgrade-slotted.xml"> -<title>Slotted MySQL Upgrade and Migration Guide</title> +<title>"Unslotting" a slotted MySQL Installation</title> <author title="Author"> <mail link="[EMAIL PROTECTED]">Francesco Riosa</mail> </author> <author title="Editor"> - <mail link="[EMAIL PROTECTED]">Chris White</mail> -</author> -<author title="Editor"> - <mail link="[EMAIL PROTECTED]">Jan Kundrát</mail> -</author> -<author title="Editor"> - <mail link="[EMAIL PROTECTED]">Joshua Saddler</mail> + <mail link="[EMAIL PROTECTED]">Xavier Neys</mail> </author> <abstract> -This document describes the upgrade path to the new slotted MySQL. It strives to -make the upgrade as painless and friendly as possible. +This document describes how to go back to an unslotted MySQL. </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>5</version> -<date>2006-02-17</date> +<version>6</version> +<date>2006-03-10</date> <chapter> -<title>Upgrading Older MySQL Versions</title> +<title>Upgrading to an unslotted MySQL version from a slotted one</title> <section> +<title>Introduction</title> <body> <p> -This document covers how to upgrade to the latest available MySQL version. There -are currently three versions of MySQL supported in Portage: +Due to the negative response from our user base, the MySQL team has decided to +go back to unslotted MySQL. In other words, installing different versions of +MySQL on the same system is not supported anymore. </p> -<ul> - <li> - 5.0 follows upstream releases in the stable tree and is actively maintained - </li> - <li> - 4.1 follows upstream releases by implementing major bugfixes and security - fixes, but no new features are added - </li> - <li>4.0 contains security fixes only</li> -</ul> - <p> -There are two additional versions present, but are currently unsupported. This -means that they may lack certain functionalities, and bug reports have very low -priority. This document is not guaranteed to work with the following versions: +If you had upgraded to the slotted version, this guide should help you upgrade +to the unslotted version. </p> -<ul> - <li>3.23 has been deprecated</li> - <li>5.1 is currently under heavy development</li> -</ul> - -<note> -<c>mysql-4.0.26</c> will be used as the starting point, and -<c>mysql-5.0.18-r30</c> as the target version. Replace any of these versions -with your own. -</note> - </body> </section> -</chapter> - - -<chapter id="install_the_new_version"> -<title>Installing the New Version</title> <section> +<title>"Unslotting"</title> <body> <p> -This step will require (re)moving some files from the running environment, so -the first thing to do is backup the running database <e>server</e>, not the -data. Once this is done, it's possible to remove the conflicting files with the -slotted MySQL, and install the new version side by side with the current one. +The following script should do most of the work: </p> -<pre caption="Backing up the older version and preparing the 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 - mv "${tmpfile}" "${tmpfile}.TMP" - ln -s "${tmpfile}.TMP" "${tmpfile}" - done</i> -# <i>emerge -av =dev-db/mysql-5.0.18-r30</i> -</pre> +<pre caption='"Unslotting" script'> +<i>echo " building a unslotted copy of mysql " +emerge --buildpkgonly '=dev-db/mysql-5.0.18-r60' -<p> -Be sure to run <c>etc-update</c> or <c>dispatch-conf</c> in order to update the -<path>/etc/init.d/mysql</path> startup script. -</p> +echo " stopping the server " +/etc/init.d/mysql stop -</body> -</section> -</chapter> +echo " removing most of symlinks " +eselect mysql remove -<chapter> -<title>Copying Data to the New Server</title> -<section> -<body> +echo " config files " +mv /etc/mysql /etc/mysql.old +mv /etc/mysql-500 /etc/mysql -<p> -Now we'll go ahead and dump the data. This will be imported into the new version -of MySQL. <c>mysqldump</c> will be used from the <b>slotted</b> MySQL. Notice -the <c>-500</c> suffix to the <c>mysqldump</c> program name. This indicates it's -from the <b>5.0</b>.x version. -</p> +echo " removal of remaining symlinks, and eselect stuff " +rm /usr/lib/mysql /usr/include/mysql /usr/bin/mysql_config /usr/lib/libmysql* +rm -rf /var/lib/eselect/mysql/ /usr/lib/mysql-[45]0[01] -<impo> -If you are upgrading between version revisions (ie. <c>dev-db/mysql-5.0.18</c> -to <c>dev-db/mysql-5.0.18-r30</c>), you can simply stop the database, move from -one data directory to the other, and restart the server. This allows you to -skip this section entirely. -</impo> - -<pre caption="Dump of all databases"> -# <i>mysqldump-500 \ - --defaults-file=/etc/mysql/my.cnf \ - --user=root \</i> - <comment>(Replace 'your_password' with your MySQL root password)</comment> - <i>--password='your_password' \ - --host=localhost \ - --all-databases \ - --opt \ - --allow-keywords \ - --flush-logs \ - --hex-blob \ - --master-data \ <comment>(If binary logs are enabled, use --master-data=0 instead)</comment> - --max_allowed_packet=16M \ - --quote-names \ - --result-file=BACKUP_MYSQL_4.0.SQL</i> -</pre> - -<p> -A file named <path>BACKUP_MYSQL_4.0.SQL</path> is created, 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="Loading the data"> -# <i>mv /etc/conf.d/mysql /etc/conf.d/mysql.orig</i> -# <i>cat <<- EOF > /etc/conf.d/mysql - NOCHECK=1 - DEBUG=3 - mysql_slot_500=( - "skip-networking" - "skip-grant-tables" - "socket=/tmp/mysqld.sock" - ) - EOF</i> -# <i>/etc/init.d/mysql start</i> -# <i>mysql-500 --defaults-file=/etc/mysql-500/my.cnf --socket=/tmp/mysqld.sock < BACKUP_MYSQL_4.0.SQL</i> -# <i>/etc/init.d/mysql stop</i> -# <i>mv /etc/conf.d/mysql.orig /etc/conf.d/mysql</i> -</pre> - -<note> -To convert the data to UTF-8 during this step, you <e>must</e> remove -<c>--hex-blob</c> from the <c>mysqldump</c> option, then filter the data through -a converter like <c>iconv</c>. In most cases this is done by simply "piping" it -like so: <c>iconv -f ISO_8859-1 -t UTF8 BACKUP_MYSQL_4.0.SQL | mysql-500 ---defaults-file=/etc/mysql-500/my.cnf</c>. Manual adjustments of the SQL file -could be required, depending on the structure and the data contained within. -</note> - -<p> -If there are applications still <e>writing</e> to the previous database, it's -possible to setup a "Replication" relationship between the two databases. -However, this document does not cover that procedure. -</p> - -</body> -</section> -</chapter> - -<chapter> -<title>Migrating to the New Server</title> -<section> -<body> - -<p> -Please test applications against the newly installed server to make sure they -work with it. Quite often every application has configuration settings to choose -which port or socket to use for connecting to the database server. 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. Please note that most -applications will try to use the parameters found in the <c>[client]</c> section -of <path>/etc/mysql/my.cnf</path> config file. -</p> - -<p> -Before you switch to the new MySQL server, you will have to adjust the following -variable inside the <path>/etc/conf.d/mysql</path>. Its value might be empty: -</p> - -<pre caption="Adjusting the mysql_slot_500 variable"> -# <i>nano -w /etc/conf.d/mysql</i> -<comment>(Add the following line:)</comment> -<i>mysql_slot_500=( )</i> -</pre> - -<p> -When you're satisfied with the results, remove every test setting, stop the old -server and start the new one: -</p> - -<pre caption="Using the new server"> -# <i>killall mysqld</i> -# <i>/etc/init.d/mysql stop zap start</i> -</pre> - -<p> -Next, unmerge the old version and make the new one the default. The unmerge -command will be unable to remove some files, such as the ones moved in <uri -link="#install_the_new_version">Code Listing 2.1</uri>. This is an intended -behavior, and is meant to avoid breaking applications linked to the old MySQL -version. -</p> - -<pre caption="Cleanup the old version"> -# <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>rm -rf /usr/lib/*.TMP</i> -# <i>for i in /usr/lib/*mysql* - do - [[ -z "$( readlink -f $i )" ]] && [[ -L $i ]] && rm $i - done</i> - -<comment>(emerge app-admin/eselect-mysql if you haven't already)</comment> -# <i>eselect mysql list</i> -# <i>eselect mysql set 1</i> -# <i>eselect mysql show</i> -</pre> - -</body> -</section> -</chapter> - -<chapter> -<title>Rebuilding Applications</title> -<section> -<body> - -<p> -After you remove your old MySQL installation, you can install the new version. -Note that <c>revdep-rebuild</c> from <c>app-portage/gentoolkit</c> is necessary -for rebuilding packages linked against MySQL. -</p> - -<pre caption="Rebuilding reverse dependancies"> -# <i>revdep-rebuild --soname libmysqlclient.so.12 -- -p -v</i> -# <i>revdep-rebuild --soname libmysqlclient.so.12</i> -</pre> - -<note> -Depending on the older MySQL version, the <path>libmysqlclient.so</path> version -may be <c>10</c>, <c>12</c>, <c>14</c> or <c>15</c>. Please choose the correct -version of the <e>old</e> package. -</note> - -</body> -</section> -</chapter> - -<chapter> -<title>Final Touches</title> -<section> -<body> +echo " unmerge slotted mysql " +emerge -C \ +=dev-db/mysql-4.0.26-r30 \ +=dev-db/mysql-4.1.15-r30 \ +=dev-db/mysql-4.1.16-r30 \ +=dev-db/mysql-4.1.18-r30 \ +=dev-db/mysql-5.0.15-r30 \ +=dev-db/mysql-5.0.16-r30 \ +=dev-db/mysql-5.0.17-r30 \ +=dev-db/mysql-5.0.18-r30 \ +=dev-db/mysql-5.1.3_alpha-r30 \ +=dev-db/mysql-5.1.4_alpha-r30 \ +=dev-db/mysql-5.1.6_alpha-r30 \ +app-admin/eselect-mysql -<pre caption="Upgrading the user database"> -<comment>(Replace all instances of 'your_password' with your MySQL root password)</comment> -# <i>mysql_fix_privilege_tables-500 \ - --defaults-file=/etc/mysql-500/my.cnf \ - --user=root \ - --password='your_password'</i> -# <i>mysql -uroot -p'your_password' mysql -e "FLUSH PRIVILEGES;"</i> -# <i>for tbl in $( mysql --silent -uroot -p'your_password' -e 'USE mysql ; SHOW TABLES LIKE "help%";' ) - do - mysql -uroot -p'your_password' -e "use mysql ; TRUNCATE TABLE ${tbl};" - done</i> -# <i>mysql -uroot -p'your_password' mysql < /usr/share/mysql/fill_help_tables.sql</i> +echo " ready to merge again MySQL " +emerge --usepkgonly '=dev-db/mysql-5.0.18-r60'</i> </pre> <p> -If you encounter any problems during the upgrade process, please file a <uri -link="https://bugs.gentoo.org">bug report</uri>. +It is also recommended that you move data directories listed in +<path>/etc/mysql/my.cnf</path>. If you do that, don't forget to edit +<path>/etc/mysql/my.cnf</path> as well. </p> </body> -- [email protected] mailing list
