Mysql 5.5.8 - character set

MySQL, PostgreSQL, SQLite
User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Mysql 5.5.8 - character set

Post by rudelgurke » 2010-12-31 13:55

Kurz zum Problem. Ein Upgrade von MySQL 5.1 auf 5.5.8 gemacht, mysql_upgrade etc. durchgeführt und auch die Ports neu erstellt. MySQL startet ohne Probleme, PHP läuft, nur Postfix, Dovecot und Pureftpd wollen nicht mehr.
Die Client Bibliothek wird geladen, nur sobald eine SQL Abfrage erfolgt steht im Log - pureftpd z. Bsp.:

Code: Select all

Can't initialize character set latin1 (path: /usr/local/share/mysql/charsets/)


Ein "SHOW CHARACTER SET;"

läuft durch ohne Probleme, latin1 wird gelistet und selbst wenn mysql von der Shell aufgerufen wird, alles kein Problem.
Was nur nicht funktioniert sind Abfragen die direkt von Postfix usw. kommen. Wie gesagt, mit PHP und mod_auth_form bzw. mod_auth_mysql - keine Probleme und auch keine Fehlermeldungen im Log.
MySQL selbst meckert auch nicht wegen evtl. Fehler beim Start (falsche Optionen z. Bsp.)

Achso - System ist ein Amd64 FreeBSD 8.1 - Pakete wurden aus den Ports erstellt und wie gesagt, nach dem Upgrade auf 5.5.8 wurden per portmaster alle Ports die MySQL benötigen neu erstellt.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Mysql 5.5.8 - character set

Post by Joe User » 2010-12-31 14:32

Die my.cnf und die MySQL-Einträge aus der make.conf bitte.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Mysql 5.5.8 - character set

Post by Joe User » 2010-12-31 15:01

/usr/ports/UPDATING hilft auch nicht wirklich weiter:

Code: Select all

20101227:
  AFFECTS: users of databases/mysql55-server
  AUTHOR: ale@FreeBSD.org

  MySQL 5.5 has been updated to 5.5.8 GA release. Since layout is
  changed you should remove mysql55-{client/server/scripts} ports
  before upgrading. The build system is changed too, so expect
  failures.

Eventuell musst Du Postfix und Co nochmal bauen, da die MySQL-Clientlib mit 5.5 wohl endgültig von latin1 auf utf8 umgestellt wurde und dies nicht immer beim ersten Rekompilieren berücksichtigt wird. MySQL 5.5 ist per Default utf8-only und die Charset/Collation-Einträge der make.conf werden im Makefile nicht mehr ausgewertet.
Da meine Systeme seit MySQL 4.1 bereits utf8-only sind, kann ich leider vorerst auch kein Testsystem zum Nachstellen hernehmen :/
Last edited by Joe User on 2010-12-31 15:02, edited 1 time in total.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: Mysql 5.5.8 - character set

Post by rudelgurke » 2010-12-31 15:56

Alles schon gemacht - Ccache oder ähnliches laufen nicht, damit nicht alte Cache Einträge übernommen werden. Und die Client und Server Ports wollen erst garnicht anfangen, bevor nicht manuell ältere Versionen deinstalliert sind - war kein Problem soweit.
Die installiert, danach alle Abhängigkeiten neu (PHP usw.). Als die Probleme anfingen pureftpd nochmals neu installiert, dann die Client Libs und dann nochmal Pureftpd.
Der Fehler blieb.

Generell würde ich - Vermutung - einen Fehler in MySQL selbst ausschließen. Wenn ich die Pureftpd Abfrage per "mysql" selbst mache, auch als User, funktioniert alles reibungslos und die Einträge kommen wie gewünscht.

Und die entsprechende CNF:

Code: Select all

[mysqld]
socket = /tmp/mysql.sock
skip_name_resolve
skip_show_database
bind_address = 127.0.10.1
binlog-do-db = board_db
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
log-bin = /var/db/mysql/mysql-bin.log
relay-log = /var/db/mysql/slave-relay.log
relay-log-index = /var/db/mysql/slave-relay-log.index
expire_logs_days = 10
max_binlog_size = 100M
binlog_cache_size = 1M
sync_binlog = 0
back_log = 50
server-id = 1


Die betroffenen Datenbanken wurden exporiert und die Tables, Einträge usw. nochmals neu erstellt, explizit mit UTF8 als Charset.

Die DB selbst sieht so aus - gekürzt zur Übersicht

Code: Select all

users | InnoDB | 10 | Compact | 1 | 16384 | 16384 | 0 | 0 | 7340032
| NULL | 2010-12-31 15:53:05 | NULL  | NULL | utf8_general_ci
Last edited by rudelgurke on 2010-12-31 16:05, edited 2 times in total.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Mysql 5.5.8 - character set

Post by Joe User » 2010-12-31 16:20

Zum Vergleich mal eine meiner my.cnf für (noch) MySQL 5.1:

Code: Select all

# cat /var/db/mysql/my.cnf
[client]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8
port                            = 3306

[mysql]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8
prompt                          = \u@\h [\d]>\_
no_auto_rehash

[mysqladmin]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8

[mysqlcheck]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8

[mysqldump]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8
max_allowed_packet              = 32M
quote_names
quick

[mysqlimport]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8

[mysqlshow]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8

[isamchk]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8
key_buffer_size                 = 256M

[myisamchk]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8
key_buffer_size                 = 256M

[myisampack]
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8

[mysqld_safe]

[mysqld]
user                            = mysql
port                            = 3306
bind-address                    = 127.0.0.1
character-sets-dir              = /usr/local/share/mysql/charsets
character-set-server            = utf8
collation-server                = utf8_bin
default-storage-engine          = InnoDB
basedir                         = /usr/local
datadir                         = /var/db/mysql
tmpdir                          = /var/tmp
slave-load-tmpdir               = /var/tmp
language                        = /usr/local/share/mysql/english
log-bin                         = /var/db/mysql/mysql-bin
relay-log                       = /var/db/mysql/relay.log
relay-log-index                 = /var/db/mysql/relay.index
relay-log-info-file             = /var/db/mysql/relay.info
master-info-file                = /var/db/mysql/master.info
#master-host                     = <hostname>
#master-user                     = <username>
#master-password                 = <password>
#master-port                     = 3306
#auto_increment_increment        = 10
#auto_increment_offset           = 1
server-id                       = 1
back_log                        = 50
sync_binlog                     = 1
binlog_cache_size               = 1M
max_binlog_size                 = 100M
binlog-format                   = MIXED
expire_logs_days                = 7
slow-query-log                  = 1
slow-query-log-file             = /var/db/mysql/slow-query.log
slave_compressed_protocol       = 1
lower_case_table_names          = 1
safe-user-create                = 1
delay-key-write                 = ALL
myisam-recover                  = FORCE,BACKUP
key_buffer_size                 = 32M
join_buffer_size                = 2M
sort_buffer_size                = 2M
read_buffer_size                = 2M
read_rnd_buffer_size            = 8M
myisam_sort_buffer_size         = 64M
max_allowed_packet              = 32M
max_heap_table_size             = 64M
tmp_table_size                  = 64M
table_cache                     = 1024
table_definition_cache          = 1024
query_cache_type                = 1
query_cache_size                = 128M
query_cache_limit               = 16M
thread_concurrency              = 8
thread_cache_size               = 50
max_connections                 = 50
ft_max_word_len                 = 20
ft_min_word_len                 = 3
long_query_time                 = 2
local-infile                    = 0
log-warnings                    = 2
log-slave-updates
log-queries-not-using-indexes
skip-external-locking
skip-character-set-client-handshake
innodb_thread_concurrency       = 8
innodb_buffer_pool_size         = 2G
innodb_additional_mem_pool_size = 128M
innodb_data_home_dir            = /var/db/mysql
innodb_log_group_home_dir       = /var/db/mysql
innodb_data_file_path           = ibdata1:2000M;ibdata2:10M:autoextend
innodb_flush_method             = O_DIRECT
innodb_log_file_size            = 128M
innodb_log_buffer_size          = 16M
innodb_log_files_in_group       = 2
innodb_flush_log_at_trx_commit  = 2
innodb_max_dirty_pages_pct      = 90
innodb_lock_wait_timeout        = 120
innodb_file_per_table           = 1

[mysqlhotcopy]
interactive_timeout
#

Und die zugehörigen Einträge in der make.conf:

Code: Select all

WITH_CHARSET=utf8
WITH_XCHARSET=all
WITH_COLLATION=utf8_bin

Prinzipiell sollte das zusammen den Charset/Collation-Defaults von MySQL 5.5 entsprechen, weshalb ich für meine Systeme keine Update-Probleme erwarte. Allerdings werde ich damit vermutlich noch bis 5.5.10 warten.

Wenn Du kannst/willst dann mache nochmal DB-Dumps und downgrade mit meinen Configs (ggf. an Deine Bedürfnisse anpassen) auf MySQL 5.1.54 und Rekompiliere die Abhängigkeiten abermals. Danach müsste meinem Verständnis nach das Upgrade ohne grosse Probleme möglich sein.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11137
Joined: 2003-02-27 01:00
Location: Hamburg

Re: Mysql 5.5.8 - character set

Post by Joe User » 2010-12-31 17:04

FreeBSD 8.1 (amd64) weitestgehend gemäss dem Link in meiner Signatur aufgesetzt. Postfix, Dovecot, mod_php und Co jeweils aktuell aus den Ports inklusive MySQL-Support. Es werden alle Ports regelmässig per portmaster aktualisiert.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: Mysql 5.5.8 - character set

Post by rudelgurke » 2010-12-31 21:44

Kurz zur Umgebung:

AMD64 - FreeBSD 8.1 mit den aktuellen Patches, auch die Ports werden täglich aktualisiert.
Es laufen 5 Jails:

1 Datenbank (MySQL 5.5.8)
2 FTP (Pureftpd)
3 Mail (Dovecot + Postfix)
4 Rsync (Backups)
5 Apache mit PHP (FastCGI)

Wie gesagt, es laufen 2 phpBB Instanzen ohne Probleme, mod_auth_form ist aktiv und macht auch keine Probleme.
Postfix holt sich seine Maps aus der MySQL Datenbank, dass läuft mittlerweile mit der Konfiguration von Joe User - besten Dank.

Was Probleme macht ist Dovecot, anfangs dachte ich dass evtl. die Dovecot 1.2.6 aus den Ports nicht will, also habe ich auf die 2.x Version ein Upgrade gemacht - gleiches Ergebnis. Sobald MySQL als Backend genutzt wird gehen die Probleme los (UserDB und PassDB).
Gleiches gilt für Pureftpd.

Schalte ich um (Pureftpd und Dovecot) dass jeweils kein SQL Verbindung genutzt wird läuft alles wie gewünscht.

Wenn ich per das Mysql binary in die Jails kopiere und händisch die Abfrage mache (SELECT etc.) kommen die Ergebnisse ohne Probleme - gleicher User wie für Dovecot und Pureftpd werden natürlich verwendet.

Einen Export der problematischen Datenbanken habe ich gemacht, dann per DROP ausgeräumt und wieder importiert, dabei vorher im Dump nochmal manuell nachgeschaut ob auch wirklich utf8 benutzt wird.

Problem bleibt bestehen.

Und - habe alles nochmals installiert, geändert hat sich nichts. Selbst die SHA Checksums bleiben die gleiche (mysqld / pure-ftpd / dovecot).

Und - zum Fehler - ich würde fehlende Libraries in den Jails ausschließen - ldd meldet sich nicht und auch mysqld läuft soweit.

Zum Jail'ing - extra per "make package" ein Paket erstellt und dass manuell in die Jails entpackt, damit dort auch nichts fehlt.
MySQL selbst - im error log:

Code: Select all

mysqld_safe Starting mysqld daemon with databases from /var/db/mysql
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use GCC atomic builtins
InnoDB: Compressed tables use zlib 1.2.3
InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: Completed initialization of buffer pool
InnoDB: highest supported file format is Barracuda.
InnoDB: 1.1.4 started; log sequence number 1803838
[Note] Event Scheduler: Loaded 0 events
[Note] /usr/local/libexec/mysqld: ready for connections.
Version: '5.5.8-log'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution


Und dann ist Ruhe. Der obige Fehler taucht im pureftpd.log auf. Wenn ich per tcpdump an den internen Interfaces "mitlausche" wird die SQL Verbindung aufgebaut bis der "latin1" Fehler kommt, dann meldet pureftpd die Auth wäre fehlgeschlagen - verständlich wenn keine Daten gelesen werden können.

Ich würde morgen nochmal Mysql komplett aus den Sources installieren - ohne die Port Patches - und dann pureftpd nochmal - auch ohne Port.

Dann sehen was dabei rauskommt.

Jetzt erstmal das neue Jahr begrüssen - Danke erstmal soweit :wink:

EDIT:

Ich habe nochmal das Ganze lokal aufgesetzt. MySQL und Pureftpd - beides war vorher noch nicht installiert - Ergebnis ist das Gleiche. :-?

2. EDIT:

Das Gleiche wenn der MySQL Server auf einem Slackware oder Windows läuft - kompiliert im Eigenbau ohne jegliche Patches. Ich vermute der Fehler liegt in der Client Bibliothek irgendwo oder in Pureftpd / Dovecot. Da:

/usr/local/share/mysql/charsets/

Weder auf der Slackware- noch der Windows Kiste existieren.
Last edited by rudelgurke on 2011-01-01 17:09, edited 3 times in total.

User avatar
daemotron
Administrator
Administrator
Posts: 2635
Joined: 2004-01-21 17:44

Re: Mysql 5.5.8 - character set

Post by daemotron » 2011-01-01 21:42

Moin, das Upgrade auf 5.5.8 unter FreeBSD ist extrem gefährlich! Den Server darf man ruhig hochziehen, aber beim Client (insb. libmysql) sollte man tunlichst noch bei <=5.5.7 bleiben. Gerade dovecot kommt überhaupt nicht mit der neuen Version klar, das gibt riesige Logfiles voller Segfaults...

siehe auch hier: http://www.pubbs.net/201012/freebsd/385 ... vecot.html

P. S. auch PHP tut nicht mit der neuen Version, die Authentifizierung schlägt fehl. Da muss wohl erst noch einiges gepatched werden, bevor 5.5.8 wirklich einsetzbar ist.

P. P. S. Python, Perl und Ruby kommen mit der neuen Version offenbar klar
Last edited by daemotron on 2011-01-01 22:20, edited 2 times in total.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time

User avatar
rudelgurke
Posts: 405
Joined: 2008-03-12 05:36

Re: Mysql 5.5.8 - character set

Post by rudelgurke » 2011-01-02 07:39

Yup - dass war es. Dovecot selbst hat keine Probleme, der auth Prozess killt sich, wird neu gestartet usw. usw. - schöne Endlosschleife die die Logs füllt.

Nun ja - kann man noch pureftpd hinzufügen zur Liste der Inkompatibilitäten.

Nur PHP macht hier keine Probleme. Für die phpBB Instanzen und einige Form Auth's, läuft alles wie es soll.

Besten Dank. Anoncvs und Downgrade, dann wie gehabt und es wollte wieder.