Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witajcie,
od kilku godzin mecze się z mysql-proxy.
Sytuacja wygląda tak:
balancer (mysql proxy) -> master -> slave (replikacja)
Replikacja działa poprawnie.
Chciałbym osiągnąć coś takiego aby zapytania modyfikujące były załatwiane na masterze,
a wszelkie selekty pochodziły z slave-a.
Config mysql-proxy wyglada tak:
ENABLED="true" OPTIONS="--proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua --proxy-address=192.168.1.50:3306 --proxy-backend-addresses=192.168.1.51:3306 --proxy-read-only-backend-addresses=192.168.1.52:3306 --admin-username=root --admin-password=pass --log-level=debug --log-file=/var/log/mysql-proxy.log "
Gdy loguje sie na konsole mysql-proxy to mam coś takiego:
balancer:/var/log# mysql --host=127.0.0.1 --port=4041 -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.99-agent-admin Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select * from proxy_config; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: *** NONE *** ERROR 1105 (07000): need a resultset + proxy.PROXY_SEND_RESULT mysql>
W logu mysql-proxy mam coś takiego:
balancer:/var/log# tail -f mysql-proxy.log 2011-04-03 21:48:57: (message) mysql-proxy 0.8.0 started 2011-04-03 21:48:57: (debug) chassis-limits.c:75: current RLIMIT_NOFILE = 1024 (hard: 1024) 2011-04-03 21:48:57: (debug) chassis-limits.c:79: trying to set new RLIMIT_NOFILE = 8192 (hard: 1024) 2011-04-03 21:48:57: (critical) chassis-limits.c:81: could not raise RLIMIT_NOFILE to 8192, Invalid argument (22). Current limit still 1024. 2011-04-03 21:48:57: (message) proxy listening on port 192.168.1.50:3306 2011-04-03 21:48:57: (message) added read/write backend: 192.168.1.51:3306 2011-04-03 21:48:57: (message) added read-only backend: 192.168.1.52:3306 2011-04-03 21:50:40: (debug) [network-mysqld.c:817]: error on a connection (fd: -1 event: 0). closing client connection. 2011-04-03 21:51:24: (debug) last message repeated 1 times 2011-04-03 21:51:24: (debug) [network-mysqld.c:817]: error on a connection (fd: -1 event: 0). closing client connection. 2011-04-03 21:52:41: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:41: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:43: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:43: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:43: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:43: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:44: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:44: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:44: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:44: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:45: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:45: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:45: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:45: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:45: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:45: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:45: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:45: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:45: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:45: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:46: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:46: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:47: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:47: (debug) abs lua-exec::done usec= 0 2011-04-03 21:52:47: (debug) abs wait-for-event::done usec= 0 2011-04-03 21:52:47: (debug) abs lua-exec::done usec= 0
Nie wiem czy to jest wina złej konfiguracji mysql-proxy, skopanego skryptu lua (skrypt nie był modyfikowany - pochodzi z paczki), czy czegoś jeszcze innego. Plz o pomoc w rozwiązaniu problemu.
Offline
A nie powinieneś wybrać jakiejś bazy danych przed wykonaniem selecta? Chyba by wypadało.
Offline
Na obu maszynach jest jedna i ta sama baza. W wydaje mi się mysql-proxy powinno już zadbać o to aby odpowiednie zapytanie było kierowane na konkretnego demona. Zapytania modyfikujące powinny być obsłużone przez mastera, a np. selekty już przez slave-a. Chyba że coś pokręciłem.
Offline
[quote=micromachine]Na obu maszynach jest jedna i ta sama baza. W wydaje mi się mysql-proxy powinno już zadbać o to aby odpowiednie zapytanie było kierowane na konkretnego demona. Zapytania modyfikujące powinny być obsłużone przez mastera, a np. selekty już przez slave-a. Chyba że coś pokręciłem.[/quote]
show databases[/quote]
i wskazujesz wybrana baze:use <db_name>[/quote]
i dopiero teraz mozesz klepac selectyOffline
A jak się ta baza nazywa? No właśnie tak jak debian_userus napisał, stąd moje pytanie. Bo może tego nie rozróżniasz. Serwer zarządza bazami, masz po jednym serwerze na obu maszynach, ale baz na nich może być założonych wiele. Więc trzeba podać nazwę bazy, której chcesz używać.
Ostatnio edytowany przez kamikaze (2011-04-03 22:37:31)
Offline
ughm
mam skrypt w php-ie który robi sobie counta z odpowiedniej bazy i tabeli,
a zaraz po tym robi inserta do tej samej bazy i tabeli.
Ale przypominam co chcę uzyskać przy pomocy mysql-proxy:
"Chciałbym osiągnąć coś takiego aby zapytania modyfikujące były załatwiane na masterze,
a wszelkie selekty pochodziły z slave-a."
Bo odnoszę wrażenie że się lekko rozmijamy.
Offline
Ok, więc jeśli to nie jest problem:
mysql> select * from proxy_config; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: *** NONE ***
To z czym masz problem?
Offline
[quote=kamikaze]Ok, więc jeśli to nie jest problem:
mysql> select * from proxy_config; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 1 Current database: *** NONE ***
To z czym masz problem?[/quote]
Zwróć uwagę ze to jest z konsoli mysql-proxy a nie z backendów.
Generalnie problemem jest to ze głupie mysql-proxy nie rozkłada zapytań wg tego skryptu /usr/share/mysql-proxy/rw-splitting.lua.
Gdy robię sobie insert-a do [b]mysql-proxy[/b] (192.168.1.50) to insert wykonuje się na [b]masterze[/b] (192.168.1.51) oraz na[b] slave-a[/b] (192.168.1.52) i to jest ok - tak ma działać.
Ale chcę aby selekt który wykonuję do mysql-proxy leciał tylko i [b]wyłącznie[/b] do [b]slave-a [/b](192.168.1.52) i to ma być dla aplikacji transparentne, wiec w kodzie zawsze będzie ten sam adres serwera, ta sama nazwa bazy i ta sama nazwa tabeli do której się odwołuje.
Dodam że mysql-proxy i oba backendy - master i slave cały czas działają poprawnie.
uff ciężko mi się pisze, ale mam nadzieję że dokładnie wytłumaczyłem o co mi chodzi.
Offline
Na replikacji mysql powiem szczerze, że się nie znam. Dlatego tylko przyczepiłem się tego selecta. Bo nie rozumiem jak można wykonać selecta nie podając bazy danych. No ale jak mówisz, że się da... Co do problemu, patrząc na to:
2011-04-03 21:48:57: (message) added read/write backend: 192.168.1.51:3306 2011-04-03 21:48:57: (message) added read-only backend: 192.168.1.52:3306
Mozna by pomyśleć, że działa poprawnie. Może czytać (robić selecty) z obu, więc może masz coś jeszcze nie skonfigurowane. Jeśli w ogóle to możliwe do zrobienia. Może pozostaje ci łączyć się do innego serwera robiąc selecty, a do innego robiąc modyfikacje.
Offline
Jak uda mi się rozpoznać temat do końca i będzie działać to chyba jakieś howto z tego powstanie dla potomnych :)
Offline
[b]!! Topic do zamknięcia !! [/b]
Problemem oczywiście była błędna konfiguracja mysql-proxy.
Poprawny, działający plik konfiguracyjny wygląda tak:
greg@panoramix:~$ cat /etc/default/mysql-proxy ENABLED="true" OPTIONS="--proxy-address=127.0.0.1:3306 --proxy-backend-addresses=192.168.1.100:3306 --proxy-read-only-backend-addresses=192.168.1.200:33061 --proxy-lua-script=/usr/share/mysql-proxy/rw-splitting.lua --admin-username=admin --admin-password=admin --admin-lua-script=/usr/share/mysql-proxy/admin-1.lua --proxy-lua-script=/usr/share/mysql-proxy/histogram.lua --log-level=debug --log-file=/var/log/mysql-proxy.log"
greg@panoramix:/etc/default$ mysql -u admin -p -h 127.0.0.1 -P 4041 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.0.99-agent-admin Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement. mysql>
Teraz możemy zobaczyć jakie backendy mamy podpięte:
mysql> SELECT * FROM backends; +————-+———————+——-+——+ | backend_ndx | address | state | type | +————-+———————+——-+——+ | 1 | 192.168.1.100:3306 | 0 | 1 | | 2 | 192.168.1.200:33061 | 0 | 2 | +————-+———————+——-+——+ 2 rows in set (0.00 sec)
Lub zobaczyć licznik zapytań
mysql> show querycounter; +—————+| query_counter |+—————+| NULL |+—————+1 row in set (0.00 sec)
Offline
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00122 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.128.201.207' WHERE u.id=1 |
0.00065 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.128.201.207', 1732571780) |
0.00043 | SELECT * FROM punbb_online WHERE logged<1732571480 |
0.00065 | DELETE FROM punbb_online WHERE ident='3.137.164.229' |
0.00098 | DELETE FROM punbb_online WHERE ident='3.147.62.5' |
0.00063 | SELECT topic_id FROM punbb_posts WHERE id=169956 |
0.00004 | SELECT id FROM punbb_posts WHERE topic_id=18703 ORDER BY posted |
0.00041 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=18703 AND t.moved_to IS NULL |
0.00017 | SELECT search_for, replace_with FROM punbb_censoring |
0.00085 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=18703 ORDER BY p.id LIMIT 0,25 |
0.00068 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=18703 |
Total query time: 0.0069 s |