MySQL рдкреНрд░рддрд┐рдХреГрддрд┐ рдПрдХ-рдЧреБрд▓рд╛рдо-рдмрд╣реБ-рдорд╛рд╕реНрдЯрд░

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛ред


рдХрдИ рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ mysql рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреГрддрд┐ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рддрд╛рдХрд┐ рдЙрди рд╕рднреА рдХрд╛ рдбреЗрдЯрд╛ рдПрдХ рд╣реА рджрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рд▓реЛрдб рд╣реЛ рдЬрд╛рдПред рдорд╛рдирдХ рд╕рд╛рдзрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд╕рдорд╕реНрдпрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдереА, рд╕рдордп рдХреЗ рд╕рд╛рде, рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕рдВрд╕реНрдХрд░рдг mysql рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖ рдЧрдпрд╛ред

рджрд░рдЕрд╕рд▓, рд╕рдорд╛рдзрд╛рдиред
рдорд╛рд╕реНрдЯрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рджрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рдЬрд╛рджреВ рдЯреЛрдирд╛ред
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рд╕реЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рдЕрд▓рдЧ mysqld рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛рдПрдБ FEDERATED рдЗрдВрдЬрди рдкрд░ рдЪрд▓рддреА рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп mysqld рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЖрдзрд╛рд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИрдВред
рдпрджрд┐ рдЖрдк mysql_multi рдФрд░ тАЛтАЛрдлрд╝реЗрдбрд░реЗрдЯреЗрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реИред рдЕрдЧрд▓рд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдХреБрдЫ рд╕реВрдХреНрд╖реНрдорддрд╛рдПрдВред

Ubuntu-server 10.04 рдХреЗ рд╕рд╛рде рдПрдХ рджрд╛рд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ред

mysqld_multi

рдореИрдВ mysqld_multi рдХреЗ рдореБрдЦреНрдп рд╕реЗрдЯрдЕрдк рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдФрд░ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИред /Usr/share/mysql/mysqld_multi.server рдореЗрдВ рдПрдХ init.d рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред
Mysqld_multi рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдорди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдкреНрд░рддрд┐рдХреГрддрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо mysqld рдЕрдиреБрднрд╛рдЧ рдЫреЛрдбрд╝рддреЗ рд╣реИрдВред
рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддрд┐рдХреГрддрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде mysqldN рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдВред рдФрд░ рдЖрдкрдХреЛ рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

$sudo cp /etc/mysql/my.cnf /etc/mysql/my_multi.cnf
$sudo chmod 600 /etc/mysql/my_multi.cnf

:
[mysqld_multi]
log = /var/log/mysql/mysqld_multi.log
mysqld = /usr/sbin/mysqld
mysqladmin = /usr/bin/mysqladmin
user = root
password = pass

[mysqld1]
datadir = /var/lib/mysql_multi/mysql1
#datadir = /var/lib/mysql_multi
socket = /var/run/mysqld/mysqld1.sock
port = 33061
tmpdir = /var/tmp/mysql/mysqld1
pid-file = /var/run/mysqld/mysqld1.pid
log_error = /var/log/mysql/error1.log
federated
#skip-innodb

server-id = 101
replicate-do-db = db
#replicate-do-db = my_db1
#replicate-rewrite-db = db->my_db1
master-info-file = mysql1-master.info
relay-log = mysql1-relay-bin
relay-log-index = mysql1-relay-bin.index
relay-log-info-file = mysql1-relay-log.info
replicate-wild-ignore-table = mysql.%

[mysqld2]
....


рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ: рд╕рднреА рдПрдХ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛) рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдбреЗрдЯрд╛рдбреЗрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рдореЗрдВ рдХрдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп mysql рд╕рд┐рд╕реНрдЯрдо рд╕реНрдХреАрдо (рдЗрд╕рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб) рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдирд┐рд░реНрджреЛрд╖ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ, рд╕реНрдерд┐рд░ рд╣реИ рдФрд░ рдирд┐рд░реНрджреЛрд╖ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЙрд╕ рдкрд░ рдмрд╕ рдЧрдпрд╛ред рд╣рд╛рдВ, рдФрд░ рдХреНрд╡реЗрд░реА-рдмреНрд░рд╛рдЙрдЬрд╝рд░, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдкреВрд░реНрдг рдирд╛рдореЛрдВ рдХреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдкреБрди: рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдХреГрддрд┐ рдХреЛ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИред

рдЕрдм рдЖрдкрдХреЛ mysqld_multi рдХреЛ --defaults-extra-file=/etc/mysql/my_multi.cnf рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
Init.d рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдпрджрд┐ рдПрдкрд░реНрдорд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
/etc/apparmor.d/usr.sbin.mysqld:
....
/usr/share/mysql/** r,
/var/log/mysql.log rw,
/var/log/mysql.err rw,
/var/lib/mysql/ r,
/var/lib/mysql/** rwk,
/var/lib/mysql_multi/ r,
/var/lib/mysql_multi/** rwk,
/var/log/mysql/ r,
/var/log/mysql/* rw,
/var/run/mysqld/mysqld.pid w,
/var/run/mysqld/mysqld.sock w,
/var/run/mysqld/mysqld?.pid w,
/var/run/mysqld/mysqld?.sock w,
/var/run/mysqld/mysqld??.pid w,
/var/run/mysqld/mysqld??.sock w,
....

$sudo service apparmor reload


рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдпрджрд┐ рдореБрдЦреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрднреА рднреА рд╕рд╛рдл рд╣реИ, рддреЛ рдЖрдк рдЗрд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ mysql_install_db рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
$sudo mkdir -pm700 /var/lib/mysql_multi/mysqlN
$sudo chown -R mysql:mysql /var/lib/mysql_multi
$sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql_multi/mysqlN

рд╣рдо рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВред
$sudo service mysqld_multi start
$mysql -uroot -p -h127.0.0.1 -P33061

рдлрд╝реЗрдбрд░реЗрдЯреЗрдбред

рдореБрдЦреНрдп рд╕рд░реНрд╡рд░ рдкрд░, рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рджреНрд╡рд╛рд░рд╛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдВ:
mysql>CREATE USER 'fdrt_local'@'localhost';
mysql>GRANT SELECT, UPDATE, DELETE ON 'rpl_%' TO 'fdrt_local'@'localhost';

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

рдкреНрд░рд╛рдердорд┐рдХ рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рддреИрдирд╛рдд рдХрд░реЗрдВред

рдЧреБрд░реБ рдкрд░
$mysqldump --opt bd | gzip > dbN_full.sql.gz
$mysqldump --opt -d bd | gzip > dbN_nodata.sql.gz

рд╕рд░реНрд╡рд░ рдкрд░ рдЕрднрд┐рд▓реЗрдЦрд╛рдЧрд╛рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдлрд┐рд░
$zcat bd_full.sql.gz | mysql repl_dbN
рдореИрдВрдиреЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреБрдЫ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рднреА рдЬреЛрдбрд╝рд╛ред

рдПрдХ рджрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдорд┐рддрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, dbN_fdrt.sql рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рджрд╛рд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред
#(CREATE[\s\w]*)`(\w*)`((.|[\n\r])*?ENGINE\s*=\s*)(\w)+((.|[\n\r])*?;)#iu

$1`$2`$3FEDERATED CONNECTION=\'mysql://fdrt_local@localhost/%db_name%/$2\'$6


рдЖрдк рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╕ рдирд╛рдо рдпрд╛ рд░рд┐рд╕реНрдЯреЛрд░ рд╕реЗ рдкрд╣рд▓реЗ sed'om рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
$sed 's/%db_name%/repl_dbN/g' bd_fdrt.sql | mysql -h127.0.0.1 -P33061 dbN


рдпрд╛ рдлрд┐рд░ рдпрд╣ рдмреЗрд╣рддрд░ рдФрд░ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдХреНрд░рд┐рдПрдЯ рд╕рд░реНрд╡рд░ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐ рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

UPD: рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдореЗрдВ mysqld 5.1.41-3ubuntu12.7 рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рджрд╛рд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╢реБрд░реВ рдХрд░реЗрдВред рд╣реЛ рдЧрдпрд╛ред

рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛: рдХрдИ рдЫреЛрдЯреА рд▓рд┐рдкрд┐рдпрд╛рдБ рдореБрдЭреЗ рдкреНрд░рддрд┐рдХреГрддрд┐, рдЬрд╛рдБрдЪ рд╕реНрдерд┐рддрд┐, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреА рд╣реИрдВред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдореИрдВ рдЦрд╝реБрд╢реА рд╕реЗ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/In131111/


All Articles