30. juni, 2009
Så kører dette site med wordpress 2.8 (opgraderet fornyligt, og iøvrigt helt uden problemer) og nu også med PHP 5.3.0 som udkom dags dato.
PHP 5.2.1 til 5.3.0 opgraderingen var langt fra problemfri, så her følger lige en uddybning af de skridt der var nødvendige for at gennemføre opgraderingen til evt. gavn for andre.
Start med at tage en backup af ALT. Både din apache installation, mysql installation + export af alle data, din php installation og din htdocs mappe. Så er du rimelig godt stillet skulle alt fejle.
MySQL opsætning
Check om MySQL password tilstanden kører med den gamle eller den nye password-længde:
Hvis din MySQL daemon kører som en service så stop den.
Start “mysqld.exe –skip-grant-tables” fra en kommando prompt.
I en ny kommando prompt skal du nu starte “mysql.exe -u root”, og indtast så følgende:
c:\mysql\bin>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-community
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select PASSWORD('helloworld');
+----------------------------+
| PASSWORD('helloworld') |
+----------------------------+
| 6c755a9e66debe8a |
+----------------------------+
1 row in set (0.02 sec)
Hvis OG KUN HVIS du ser ovenstående resultat anvender din mysql installation den gamle password-længde, og du skal derfor opgradere dine privilege tabeller. Kig efter i script mappen i din mysql rodmappe, her bør du kunne finde filen “mysql_fix_privilege_tables.sql”. Kopier denne fil ind i mysql/bin mappen, og start så mysql.exe med følgende parametre fra en kommando prompt:
c:\mysql\bin>mysql -u root --force mysql < mysql_fix_privilege_tables.sql
...
ERROR 1060 (42S21) at line 282: Duplicate column name 'Create_routine_priv'
ERROR 1060 (42S21) at line 283: Duplicate column name 'Create_routine_priv'
ERROR 1060 (42S21) at line 284: Duplicate column name 'Create_routine_priv'
ERROR 1060 (42S21) at line 289: Duplicate column name 'Alter_routine_priv'
ERROR 1060 (42S21) at line 290: Duplicate column name 'Alter_routine_priv'
ERROR 1060 (42S21) at line 291: Duplicate column name 'Alter_routine_priv'
ERROR 1060 (42S21) at line 293: Duplicate column name 'Execute_priv'
ERROR 1060 (42S21) at line 294: Duplicate column name 'Execute_priv'
ERROR 1060 (42S21) at line 306: Duplicate column name 'max_user_connections'
@hadCreateUserPriv:=1
...
ERROR 1060 (42S21) at line 315: Duplicate column name 'Create_user_priv'
Ignorer alle advarsler og fejlbeskeder der kommer efter at have afviklet kommandoen. Alt er godt.
Nu bør du kunne se en længere hash-værdi for passwords i mysql klienten:
c:\mysql\bin>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-community
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select PASSWORD('helloworld');
+-------------------------------------------+
| PASSWORD('helloworld') |
+-------------------------------------------+
| *D35DB127DB631E6E27C6B75E8D376B04F64FAF83 |
+-------------------------------------------+
1 row in set (0.00 sec)
Slutteligt skal du resette alle dine mysql bruger passwords. Typisk har man kun root brugeren oprettet til en simpel apache/wordpress installation, men har du selv oprettet flere brugere skal du huske at opdatere disse. Dette gøres således:
c:\mysql\bin>mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.27-community
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> UPDATE mysql.user SET Password=PASSWORD('myNewPw') WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Hvis du benytter mysql som en service, luk så mysqld.exe ned, og genstart din daemon service igen.
Installation af PHP5.3.0
Stop din apache daemon.
Omdøb din gamle php mappe til fx php521.
Opret en ny php mappe og kopier alle filerne fra den nye PHP 5.3.0 distribution herind. Du skal hente VC60 udgaven til apache, da det er den eneste der fungerer hertil. Jeg valgte Thread safe udgaven der kan hentes herfra.
Slet dine gamle php.dll og lib filer fra din apache/bin mappe (disse kan ved nyere installationer også være placeret direkte i php mappen, i så fald kan du springe dette punkt over). Kopien af din gamle php.ini skal du lige holde fast i, for der skal muligvis skrues på nogle indstillinger i den php.ini-production der medfølger PHP 5.3.0 der er specifkke for din gamle opsætning der ikke dækkes af denne opsætningsgennemgang.
Kopier php.ini-production filen ind hvor din gamle php.ini lå og omdøb filen til php.ini.
Følgende værdier skal ændres i php.ini filen (husk at checke om du evt. selv har sat yderligere tilpassede værdier i din gamle php.ini):
short_open_tag = On
zlib.output_compression = On
post_max_size = 16M
extension_dir = "C:\php\ext\" (Sæt til stien for din php installation!)
mysql.default_port = 3306
mysql.default_host = localhost
mysqli.default_host = localhost
Følgende extensions er rare at have aktiveret pr. default i php.ini (og visse er påkrævet af wordpress og mysql):
extension=php_exif.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_imap.dll
extension=php_mbstring.dll
extension=php_ming.dll
extension=php_mssql.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_soap.dll
extension=php_sockets.dll
extension=php_sqlite.dll
extension=php_xmlrpc.dll
extension=php_xsl.dll
extension=php_zip.dll
Start nu din apache daemon igen.
Placer en fil i htdocs mappen med følgende indhold (navngiv f.eks. phpinfo.php):
Åben nu filen i din browser, f.eks. fra adressen http://localhost/phpinfo.php, eller hvor du nu har placeret filen.
Check at følgende extensions er aktiverede: gd2, gettext, mysql, mysqli og mysqlnd.
Placer nu en testdb.php fil i din htdocs mappe med følgende indhold (jf. det login du har opdateret i mysql, eller som du iforvejen har anvendt i din opdaterede mysql installation):
<?php
$link = mysql_connect(
'localhost:3306',
'root',
'myNewPw'
);
if (!$link) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>
Check at http://localhost/testdb.php viser teksten “Connected successfully”.
Så skulle du være klar, og din wordpress kører nu med PHP 5.3.0 og en ny mysql password authentication metode.