Lines 3-34
Link Here
|
3 |
<!-- $Header$ --> |
3 |
<!-- $Header$ --> |
4 |
|
4 |
|
5 |
<guide link="/doc/en/mysql-upgrade-slotted.xml"> |
5 |
<guide link="/doc/en/mysql-upgrade-slotted.xml"> |
6 |
<title>MySQL, upgrade and switch to slotted guide</title> |
6 |
<title>Slotted MySQL Upgrade and Migration Guide</title> |
7 |
|
7 |
|
8 |
<author title="Author"> |
8 |
<author title="Author"> |
9 |
<mail link="vivo@gentoo.org">Francesco Riosa</mail> |
9 |
<mail link="vivo@gentoo.org">Francesco Riosa</mail> |
10 |
</author> |
10 |
</author> |
|
|
11 |
<author title="Editor"> |
12 |
<mail link="chriswhite@gentoo.org">Chris White</mail> |
13 |
</author> |
14 |
<author title="Editor"> |
15 |
<mail link="jkt@gentoo.org"></mail> |
16 |
</author> |
11 |
|
17 |
|
12 |
<abstract> |
18 |
<abstract> |
13 |
Here described there is an upgrade path for MySQL databases as painless as |
19 |
This document describes the upgrade path to the new slotted MySQL. It strives |
14 |
possible. |
20 |
to make the upgrade as painless and friendly as possible. |
15 |
</abstract> |
21 |
</abstract> |
16 |
|
22 |
|
17 |
<!-- The content of this document is licensed under the CC-BY-SA license --> |
23 |
<!-- The content of this document is licensed under the CC-BY-SA license --> |
18 |
<!-- See http://creativecommons.org/licenses/by-sa/2.5 --> |
24 |
<!-- See http://creativecommons.org/licenses/by-sa/2.5 --> |
19 |
<license/> |
25 |
<license/> |
20 |
|
26 |
|
21 |
<version>1</version> |
27 |
<version>1.0</version> |
22 |
<date>2006-01-25</date> |
28 |
<date>2006-01-25</date> |
23 |
|
29 |
|
24 |
<chapter> |
30 |
<chapter> |
25 |
<title>Upgrading from old versions of MySQL</title> |
31 |
<title>Upgrading Older MySQL Versions</title> |
26 |
<section> |
32 |
<section> |
27 |
<body> |
33 |
<body> |
28 |
|
34 |
|
29 |
<p> |
35 |
<p> |
30 |
This document cover how to upgrade to the latest version available. There are |
36 |
This document covers how to upgrade to the latest avaliable MySQL version. |
31 |
currently three version of MySQL supported in portage: |
37 |
There are currently three versions of MySQL supported in portage: |
32 |
</p> |
38 |
</p> |
33 |
|
39 |
|
34 |
<ul> |
40 |
<ul> |
Lines 38-57
Link Here
|
38 |
</ul> |
44 |
</ul> |
39 |
|
45 |
|
40 |
<p> |
46 |
<p> |
41 |
There are two additional version presently, but are currently unsupported |
47 |
There are two additional versions present, but are currently unsupported. |
42 |
meaning that bug reports have very low priority any may lack functionalities. |
48 |
This means that bug reports have very low priority any may lack functionalities. |
43 |
The current document is not guaranteed to work with them. |
49 |
This document is not guaranteed to work with them. |
44 |
</p> |
50 |
</p> |
45 |
|
51 |
|
46 |
<ul> |
52 |
<ul> |
47 |
<li>3.23 ancient</li> |
53 |
<li>3.23 deprecated</li> |
48 |
<li>5.1 active development</li> |
54 |
<li>5.1 active development</li> |
49 |
</ul> |
55 |
</ul> |
50 |
|
56 |
|
51 |
<note> |
57 |
<note> |
52 |
The present document will use <c>mysql-4.0.26</c> as start point and |
58 |
<c>mysql-4.0.26</c> will be used as start point, and <c>mysql-5.0.18-r30</c> as |
53 |
<c>mysql-5.0.18-r30</c> as the target version. Replace any of these with your |
59 |
the target version. Replace any of these versions with your own. |
54 |
own. |
|
|
55 |
</note> |
60 |
</note> |
56 |
|
61 |
|
57 |
</body> |
62 |
</body> |
Lines 60-77
Link Here
|
60 |
|
65 |
|
61 |
|
66 |
|
62 |
<chapter id="install_the_new_version"> |
67 |
<chapter id="install_the_new_version"> |
63 |
<title>Install the new version</title> |
68 |
<title>Installing The New Version</title> |
64 |
<section> |
69 |
<section> |
65 |
<body> |
70 |
<body> |
66 |
|
71 |
|
67 |
<p> |
72 |
<p> |
68 |
This step require to (re)move some files from the running environment, so the |
73 |
This step will require (re)moving some files from the running environment, so |
69 |
first thing to do is a backup of the running database server, still not the |
74 |
the first thing to do is backup the running database server, not the data. Once |
70 |
data. Done that, it's possible to remove the conflicting files with the slotted |
75 |
this is done, it's possible to remove the conflicting files with the slotted |
71 |
MySQL and install the new version side by side with the current one. |
76 |
MySQL, and install the new version side by side with the current one. |
72 |
</p> |
77 |
</p> |
73 |
|
78 |
|
74 |
<pre caption="Backup old package and prepare installation"> |
79 |
<pre caption="Backing up the older version and preparing the installation"> |
75 |
# <i>quickpkg dev-db/mysql</i> |
80 |
# <i>quickpkg dev-db/mysql</i> |
76 |
# <i>rm -rf /usr/include/mysql /usr/bin/mysql_config</i> |
81 |
# <i>rm -rf /usr/include/mysql /usr/bin/mysql_config</i> |
77 |
# <i>for tmpfile in /usr/lib/*mysql* ; do</i> |
82 |
# <i>for tmpfile in /usr/lib/*mysql* ; do</i> |
Lines 82-89
Link Here
|
82 |
</pre> |
87 |
</pre> |
83 |
|
88 |
|
84 |
<p> |
89 |
<p> |
85 |
Be sure to update the <path>/etc/init.d/mysql</path> startup script with |
90 |
Be sure to run <c>etc-update</c> or <c>dispatch-conf</c> in order to update the |
86 |
<c>etc-update</c> or <c>dispatch-conf</c>. |
91 |
<path>/etc/init.d/mysql</path> startup script. |
87 |
</p> |
92 |
</p> |
88 |
|
93 |
|
89 |
</body> |
94 |
</body> |
Lines 91-113
Link Here
|
91 |
</chapter> |
96 |
</chapter> |
92 |
|
97 |
|
93 |
<chapter> |
98 |
<chapter> |
94 |
<title>Copy the data to the newly installed server</title> |
99 |
<title>Copying The Data To The New Server</title> |
95 |
<section> |
100 |
<section> |
96 |
<body> |
101 |
<body> |
97 |
|
102 |
|
98 |
<p> |
103 |
<p> |
99 |
Lets go to to dump the data, this will be imported in the new version of MySQL. |
104 |
Now we'll go ahead and dump the data. This will be imported into the new |
100 |
We are going to use mysqldump from the <b>slotted</b> MySQL. Notice the |
105 |
version of MySQL. <c>mysqldump</c> will be used from the <b>slotted</b> |
101 |
<c>-500</c> suffix to the mysqldump program name, it's from the <b>5.0</b>.x |
106 |
MySQL. Notice the <c>-500</c> suffix to the <c>mysqldump</c> program name. This |
102 |
version. |
107 |
indicates it's from the <b>5.0</b>.x version. |
103 |
</p> |
108 |
</p> |
104 |
|
109 |
|
|
|
110 |
<impo> |
111 |
If you are upgrading between version revisions (ie. <c>dev-db/mysql-5.0.18</c> |
112 |
to <c>dev-db/mysql-5.0.18-r30</c>), you can simply stop the database, move from |
113 |
one datadir to the other, and restart the server. This allows you to skip this |
114 |
section entirely. |
115 |
</impo> |
116 |
|
105 |
<pre caption="Dump of all databases"> |
117 |
<pre caption="Dump of all databases"> |
106 |
# <i>mysqldump-500 \</i> |
118 |
# <i>mysqldump-500 \</i> |
107 |
<i>--defaults-file=/etc/mysql/my.cnf</i> |
119 |
<i>--defaults-file=/etc/mysql/my.cnf \</i> |
108 |
<i>-uroot \</i> |
120 |
<i>--user=root \</i> |
109 |
<i>--password=</i><comment>'your_password'</comment><i> \</i> |
121 |
<comment>(Replace 'your_password' with your MySQL root password)</comment> |
110 |
<i>-hlocalhost \</i> |
122 |
<i>--password='your_password' \</i> |
|
|
123 |
<i>--host=localhost \</i> |
111 |
<i>--all-databases \</i> |
124 |
<i>--all-databases \</i> |
112 |
<i>--opt \</i> |
125 |
<i>--opt \</i> |
113 |
<i>--allow-keywords \</i> |
126 |
<i>--allow-keywords \</i> |
Lines 120-126
Link Here
|
120 |
</pre> |
133 |
</pre> |
121 |
|
134 |
|
122 |
<p> |
135 |
<p> |
123 |
Now a file named <path>BACKUP_MYSQL_4.0.SQL</path> exist which can be used to |
136 |
A file named <path>BACKUP_MYSQL_4.0.SQL</path> is created, which can be used to |
124 |
recreate your data. The data is described in the MySQL dialect of SQL, the |
137 |
recreate your data. The data is described in the MySQL dialect of SQL, the |
125 |
Structured Query Language. |
138 |
Structured Query Language. |
126 |
</p> |
139 |
</p> |
Lines 129-163
Link Here
|
129 |
Start the server without networking and user management and run the SQL script: |
142 |
Start the server without networking and user management and run the SQL script: |
130 |
</p> |
143 |
</p> |
131 |
|
144 |
|
132 |
<pre caption="Load data"> |
145 |
<pre caption="Loading the data"> |
133 |
# <i>mv /etc/conf.d/mysql /etc/conf.d/mysql.orig</i> |
146 |
# <i>mv /etc/conf.d/mysql /etc/conf.d/mysql.orig</i> |
134 |
# <i>echo '</i> |
147 |
# <i>cat <<- EOF > /etc/conf.d/mysql</i> |
135 |
<i>NOCHECK=1</i> |
148 |
<i>NOCHECK=1</i> |
136 |
<i>DEBUG=3</i> |
149 |
<i>DEBUG=3</i> |
137 |
<i>mysql_slot_500=(</i> |
150 |
<i>mysql_slot_500=(</i> |
138 |
<i> "skip-networking"</i> |
151 |
<i> "skip-networking"</i> |
139 |
<i> "skip-grant-tables"</i> |
152 |
<i> "skip-grant-tables"</i> |
140 |
<i>)</i> |
153 |
<i>)</i> |
141 |
<i>' > /etc/conf.d/mysql</i> |
154 |
<i>EOF</i> |
142 |
# <i>/etc/init.d/mysql-500 start</i> |
155 |
# <i>/etc/init.d/mysql-500 start</i> |
143 |
# <i>mysql-500 --defaults-file=/etc/mysql-500/my.cnf < BACKUP_MYSQL_4.0.SQL</i> |
156 |
# <i>mysql-500 --defaults-file=/etc/mysql-500/my.cnf < BACKUP_MYSQL_4.0.SQL</i> |
144 |
# <i>mv /etc/conf.d/mysql.orig /etc/conf.d/mysql</i> |
|
|
145 |
# <i>/etc/init.d/mysql-500 stop</i> |
157 |
# <i>/etc/init.d/mysql-500 stop</i> |
|
|
158 |
# <i>mv /etc/conf.d/mysql.orig /etc/conf.d/mysql</i> |
146 |
</pre> |
159 |
</pre> |
147 |
|
160 |
|
148 |
<note> |
161 |
<note> |
149 |
To convert the data to UTF-8 during this step you <e>must</e> remove |
162 |
To convert the data to UTF-8 during this step, you <e>must</e> remove |
150 |
<c>--hex-blob</c> from the <c>mysqldump</c> option, then filter the data through |
163 |
<c>--hex-blob</c> from the <c>mysqldump</c> option, then filter the data through |
151 |
a converter like <c>iconv</c>. In most case this is done simply "piping" it like |
164 |
a converter like <c>iconv</c>. In most cases this is done by simply "piping" it |
152 |
<c>iconv -f ISO_8859-1 -t UTF8 BACKUP_MYSQL_4.0.SQL | mysql-500 |
165 |
like so: <c>iconv -f ISO_8859-1 -t UTF8 BACKUP_MYSQL_4.0.SQL | mysql-500 |
153 |
--defaults-file=/etc/mysql-500/my.cnf</c>. Also manual tweaking of the SQL file |
166 |
--defaults-file=/etc/mysql-500/my.cnf</c>. Manual adjustments of the SQL file |
154 |
could be needed, depending on the structure and the data contained in it. |
167 |
could be required, depending on the structure and the data contained within. |
155 |
</note> |
168 |
</note> |
156 |
|
169 |
|
157 |
<note> |
170 |
<note> |
158 |
If there are applications still <e>writing</e> to the previous database, it's |
171 |
If there are applications still <e>writing</e> to the previous database, it's |
159 |
possible to setup a "Replication" relationship between the two databases, |
172 |
possible to setup a "Replication" relationship between the two databases. |
160 |
however this will not be covered here. |
173 |
However, this document will not be cover that procedure. |
161 |
</note> |
174 |
</note> |
162 |
|
175 |
|
163 |
</body> |
176 |
</body> |
Lines 166-192
Link Here
|
166 |
|
179 |
|
167 |
|
180 |
|
168 |
<chapter> |
181 |
<chapter> |
169 |
<title>Switch to the new server</title> |
182 |
<title>Migrating To The New Server</title> |
170 |
<section> |
183 |
<section> |
171 |
<body> |
184 |
<body> |
172 |
|
185 |
|
173 |
<p> |
186 |
<p> |
174 |
If you need to be sure that applications are working with the newly installed |
187 |
If you need to be sure that applications are working with the newly installed |
175 |
server, please test them against it, quite every application has configuration |
188 |
server, please test them against it. Quite often every application has |
176 |
settings to chose which port or socket to use to connect to the database |
189 |
configuration settings to chose which port or socket to use for connecting to |
177 |
server. Simply start the server on an alternate port (for example 3307) and tell |
190 |
the database server. Simply start the server on an alternate port (for example |
178 |
your application or a test copy of it to connect with those parameters. Pay |
191 |
3307) and tell your application, or a test copy of it, to connect with those |
179 |
attention that most of them will try to use the parameters found in the |
192 |
parameters. Please note that most applications will try to use the parameters |
180 |
<c>[client]</c> section of <path>/etc/mysql/my.cnf</path> config file. |
193 |
found in the <c>[client]</c> section of <path>/etc/mysql/my.cnf</path> config file. |
181 |
</p> |
194 |
</p> |
182 |
|
195 |
|
183 |
<p> |
196 |
<p> |
184 |
When you're satisfied with the results, remove every testing setting, stop the |
197 |
When you're satisfied with the results, remove every test setting, stop the |
185 |
old server and start the new one. Also make it the server that will start at |
198 |
old server and start the new one. Also, be sure to add |
186 |
next reboot. |
199 |
<path>/etc/init.d/mysql</path> to the default runlevel, ensuring it starts at |
|
|
200 |
the next reboot. |
187 |
</p> |
201 |
</p> |
188 |
|
202 |
|
189 |
<pre caption="Use the new server"> |
203 |
<pre caption="Using the new server"> |
190 |
# <i>rc-update del mysql default</i> |
204 |
# <i>rc-update del mysql default</i> |
191 |
# <i>rc-update add mysql-500 default</i> |
205 |
# <i>rc-update add mysql-500 default</i> |
192 |
# <i>/etc/init.d/mysql stop</i> |
206 |
# <i>/etc/init.d/mysql stop</i> |
Lines 195-204
Link Here
|
195 |
|
209 |
|
196 |
<p> |
210 |
<p> |
197 |
Unmerge the old version, and make the new one the default. The unmerge command |
211 |
Unmerge the old version, and make the new one the default. The unmerge command |
198 |
will be unable to remove some files, the ones moved in <uri |
212 |
will be unable to remove some files, such as the ones moved in <uri |
199 |
link="#install_the_new_version">Backup old package and prepare |
213 |
link="#install_the_new_version">Backing up the older version and preparing the |
200 |
installation</uri>. This is an intended behavior, and avoid breaking application |
214 |
installation</uri>. This is an intended behavior, and meant to avoid breaking |
201 |
linked to the old MySQL version. |
215 |
applications linked to the old MySQL version. |
202 |
</p> |
216 |
</p> |
203 |
|
217 |
|
204 |
<pre caption="cleanup first step"> |
218 |
<pre caption="cleanup first step"> |
Lines 207-216
Link Here
|
207 |
# <i>cd /etc</i> |
221 |
# <i>cd /etc</i> |
208 |
# <i>mv mysql mysql.$(date +%F_%H-%M)</i> |
222 |
# <i>mv mysql mysql.$(date +%F_%H-%M)</i> |
209 |
# <i>rm -rf /usr/lib/*.TMP</i> |
223 |
# <i>rm -rf /usr/lib/*.TMP</i> |
210 |
# <i>rm -rf /usr/lib/*.TMP</i> |
|
|
211 |
# <i>for i in /usr/lib/*mysql* ; do</i> |
224 |
# <i>for i in /usr/lib/*mysql* ; do</i> |
212 |
<i> readlink -f $i || [[ -L $i ]] && rm $i</i> |
225 |
<i> [[ -z "$( readlink -f $i )" ]] && [[ -L $i ]] && rm $i</i> |
213 |
<i>done</i> |
226 |
<i>done</i> |
|
|
227 |
<comment>(emerge app-admin/eselect-mysql if you haven't already)</comment> |
214 |
# <i>eselect mysql list</i> |
228 |
# <i>eselect mysql list</i> |
215 |
# <i>eselect mysql set 1</i> |
229 |
# <i>eselect mysql set 1</i> |
216 |
# <i>eselect mysql show</i> |
230 |
# <i>eselect mysql show</i> |
Lines 222-235
Link Here
|
222 |
|
236 |
|
223 |
|
237 |
|
224 |
<chapter> |
238 |
<chapter> |
225 |
<title>Rebuild applications</title> |
239 |
<title>Rebuilding Applications</title> |
226 |
<section> |
240 |
<section> |
227 |
<body> |
241 |
<body> |
228 |
|
242 |
|
229 |
<p> |
243 |
<p> |
230 |
After you got rid of your old MySQL installation, you can now install the new |
244 |
After you remove your old MySQL installation, you can now install the new |
231 |
version. Note that <c>revdep-rebuild</c> from the <c>app-portage/gentoolkit</c> |
245 |
version. Note that <c>revdep-rebuild</c> from the <c>app-portage/gentoolkit</c> |
232 |
is necessary for rebuilding packages linking against MySQL. |
246 |
is necessary for rebuilding packages linked against MySQL. |
233 |
</p> |
247 |
</p> |
234 |
|
248 |
|
235 |
<pre caption="Reverse dependancies rebuild"> |
249 |
<pre caption="Reverse dependancies rebuild"> |
Lines 238-245
Link Here
|
238 |
</pre> |
252 |
</pre> |
239 |
|
253 |
|
240 |
<note> |
254 |
<note> |
241 |
Depending on which really is the old version <path>libmysqlclient.so</path> |
255 |
Depending on the older MySQL version, the <path>libmysqlclient.so</path> |
242 |
number may be 10, 12, 14 or 15, chose the one of the <e>old</e> package. |
256 |
version may be 10, 12, 14 or 15. Please choose version of the <e>old</e> |
|
|
257 |
package. |
243 |
</note> |
258 |
</note> |
244 |
|
259 |
|
245 |
</body> |
260 |
</body> |
Lines 248-273
Link Here
|
248 |
|
263 |
|
249 |
|
264 |
|
250 |
<chapter> |
265 |
<chapter> |
251 |
<title>Final touches</title> |
266 |
<title>Final Touches</title> |
252 |
<section> |
267 |
<section> |
253 |
<body> |
268 |
<body> |
254 |
|
269 |
|
255 |
<pre caption="Upgrading user database"> |
270 |
<pre caption="Upgrading user database"> |
|
|
271 |
<comment>(Replace all instances of 'your_password' with your MySQL root password)</comment> |
256 |
# <i>mysql_fix_privilege_tables-500 \</i> |
272 |
# <i>mysql_fix_privilege_tables-500 \</i> |
257 |
<i>--defaults-file=/etc/mysql-500/my.cnf \</i> |
273 |
<i>--defaults-file=/etc/mysql-500/my.cnf \</i> |
258 |
<i>--user=root \</i> |
274 |
<i>--user=root \</i> |
259 |
<i>--password=</i><comment>'your_password'</comment><i></i> |
275 |
<i>--password='your_password'</i> |
260 |
# <i>mysql -uroot -p</i><comment>'your_password'</comment><i> mysql -e "FLUSH PRIVILEGES;"</i> |
276 |
# <i>mysql -uroot -p'your_password' mysql -e "FLUSH PRIVILEGES;"</i> |
261 |
# <i>for tbl in $( mysql --silent -uroot -p</i><comment>'your_password'</comment><i> -e 'USE mysql ; SHOW TABLES LIKE "help%";' )</i> |
277 |
# <i>for tbl in $( mysql --silent -uroot -p'your_password' -e 'USE mysql ; SHOW TABLES LIKE "help%";' )</i> |
262 |
<i>do</i> |
278 |
<i>do</i> |
263 |
<i>mysql -uroot -p</i><comment>'your_password'</comment><i> -e "use mysql ; TRUNCATE TABLE ${tbl};"</i> |
279 |
<i>mysql -uroot -p'your_password' -e "use mysql ; TRUNCATE TABLE ${tbl};"</i> |
264 |
<i>done</i> |
280 |
<i>done</i> |
265 |
# <i>mysql -uroot -p</i><comment>'your_password'</comment><i> mysql < /usr/share/mysql/fill_help_tables.sql</i> |
281 |
# <i>mysql -uroot -p'your_password' mysql < /usr/share/mysql/fill_help_tables.sql</i> |
266 |
</pre> |
282 |
</pre> |
267 |
|
283 |
|
268 |
<p> |
284 |
<p> |
269 |
If you encountered any problems during the upgrade process, please report them |
285 |
If you encounter any problems during the upgrade process, please report them |
270 |
at our <uri link="https://bugs.gentoo.org">Bugzilla</uri>. |
286 |
to our <uri link="https://bugs.gentoo.org">Bugzilla</uri>. |
271 |
</p> |
287 |
</p> |
272 |
|
288 |
|
273 |
</body> |
289 |
</body> |