文档库 最新最全的文档下载
当前位置:文档库 › Mysql多主一从配置

Mysql多主一从配置

以二主一从为例,
两台主 MySQL Server照正常情况配置,唯一需要注意的是,端口需要与从服务器上对应的数据库配置的端口一致
修改/etc/https://www.wendangku.net/doc/5614878760.html,f文档
将port=3306改为port=3307或改成相应的端口

mysql编译安装标准流程如下
安装mysql
本文采用的是二进制安装的方式进行的,基本的顺序和 mysql 官方的顺序差不多,只不过有些地方做一些说明。
shell> groupadd mysql
shell> useradd -g mysql mysql
shell> cd /usr/local
shell> tar -xvzf /path/to/mysql-VERSION-OS.tar.gz
shell> mkdir /usr/local/mysql
shell> cp -rf /path/to/mysql-VERSION-OS /usr/local/mysql
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
shell> scripts/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql data
shell> bin/mysqld_safe --user=mysql &
前面几步一般不会有问题,只是最后一步执行 bin/mysqld_safe --user=mysql & 的时候,系统出错了:
Starting mysqld daemon with databases from /var/lib/mysql
STOPPING server from pid file /var/run/mysqld/mysqld.pid
090930 12:19:32 mysqld ended
然后就结束了,这个问题的原因,我们可以在日志文件 /var/log/mysqld.log 中看到
090930 12:19:31 mysqld started
090930 12:19:31 [Warning] option 'thread_stack': unsigned value 126976 adjusted to 131072
090930 12:19:32 InnoDB: Started; log sequence number 0 43655
090930 12:19:32 [ERROR] /usr/local/mysql/bin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)
090930 12:19:32 [ERROR] Can't start server: can't create PID file: No such file or directory
090930 12:19:32 mysqld ended

也就是权限不够,解决的办法有两个,一个是建立一个 mysql 有权限读写的 /var/run/mysqld/ 文件夹;另一个方法,我们可以使用 /usr/local/mysql/support-files/mysql.server 来进行服务的启动。

这样 mysql 安装完成以后,文件的存放结构都是按照默认的设定来的,比如一些常见的:
配置文件 /etc/https://www.wendangku.net/doc/5614878760.html,f
basedir /usr/local/mysql
最后需要配置一下mysql随系统启动服务,拷贝 /usr/local/mysql/support-files/mysql.server -> /etc/rc.d/init.d/mysql 中,然后添加 chkconfig --add mysql
这样就可以通过 service mysql start 来启动 mysql 服务了


主要重点描述从服务器上mysql配置

1,首先安装Mysql,用编译或RPM安装均可,编译安装定制性更强,以编译安装为例
a)
./configure --prefix=/usr/local/mysql --datadir=/usr/local/mysql/data1 --sysconfdir=/etc
--prefix指定安装到/usr/local/mysql下,
--datadir指定数据放在/usr/local/mysql/data1下,
--sysconfdir指定配置文件https://www.wendangku.net/doc/5614878760.html,f放在/etc下
b)
make
make install
c)
#chown -R mysql.mysql /

usr/local/mysql/
#cd /usr/local/mysql
#./script/mysql_install_db --datadir=/usr/local/mysql/data1
安装mysql系统表,可能出现问题,如:Duplicate entry 'localhost-' for key 'PRIMARY',解决方法
修改/etc/hosts,和/etc/sysconfig/network里关于机器名localhost的定义,修改为合适的主机名。
#chown -R mysql.mysql data1
#cp -R data1 data2
d)
mysqld_multi是管理多个mysqld的服务进程,这些服务进程程序不同的unix socket或是监听于不同的端口。他可以启动、停止和监控当前的服务状态。
程序在https://www.wendangku.net/doc/5614878760.html,f(或是在--config-file自定义的配置文件)中搜索[mysqld#]段,"#"可以是任意的正整数。这个正整数就是在下面提及的段序列,即GNR。段的序号做为mysqld_multi的参数,来区别不同的段,这样你就可以控制特定mysqld进程的启动、停止或得到他的报告信息。这些组里的参数就像启动一个mysqld所需要的组的参数一样。但是,如果使用多服务,必须为每个服务指定一个unix socket或端口
以下四项必须设定
port = 3306
socket = /tmp/mysql.sock1
pid-file=/usr/local/mysql/data1/test-db1a.pid
datadir = /usr/local/mysql/data1


示例配置文件https://www.wendangku.net/doc/5614878760.html,f
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root

password = 000000
[mysqld1]
port = 3306
socket = /tmp/mysql.sock1
skip-locking
pid-file=/usr/local/mysql/data1/test-db1a.pid
datadir = /usr/local/mysql/data1
log=/usr/local/mysql/data1/test-db1.log
user = mysql
log-slow-queries=/usr/local/mysql/data/slowquery.log
long_query_time = 2
key_buffer = 256M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 2M
read_buffer_size = 2M
myisam_sort_buffer_size = 64M
thread_cache = 32
query_cache_size = 32M
thread_concurrency = 2
max_connections=500
server-id = 2
master-host = 192.168.0.1
master-user = 'replcate'
master-password = '1234567890'
master-port = 3306
report-host = test-db3
master-connect-retry = 30
log-bin
log-slave-updates

[mysqld2]
port = 3307
socket = /tmp/mysql.sock2
pid-file = /usr/local/mysql/data2/test-db2b.pid
datadir = /usr/local/mysql/data2
log=/usr/local/mysql/data2/test-db2.log
user = mysql
log-slow-queries=/usr/local/mysql/data2/slowquery.log
long_query_time = 10
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 512
sort_buffer_size = 1M
read_buffer_size = 1M
myisam_sort_buffer_size = 32M
thread_cache = 32
query_cache_size = 16M
thread_concurrency = 2
max_connections=300
server-id = 2
master-host = 192.168.0.2
master-user = 'repl'
master-password = '1234567890'
master-port = 3307
report-host = test-db3
master-connect-retry = 30
log-bin
log-slave-updates
以上mysql多实例配置完成

做服务
329 cp /usr/bin/mysqld_multi /etc/init.d/mysqld_multi
330 chmod +x /etc/init.d/mysqld_multi
2,启动多实例
/usr/local/mysql/bin/mysqld_m

ulti --config-file=/etc/https://www.wendangku.net/doc/5614878760.html,f start 1-2
或/usr/local/mysql/bin/mysqld_multi --config-file=/etc/https://www.wendangku.net/doc/5614878760.html,f start 1,2

3,设置密码及登录多实例
a)设置密码
#mysqladmin -u root password newpassword --socket=/tmp/mysql.sock1
#mysqladmin -u root password newpassword --socket=/tmp/mysql.sock2
b)登录
mysql -uroot -p -S /tmp/mysql.sock1
mysql -uroot -p -S /tmp/mysql.sock2




设置主从备份
首先操作Master数据库,如下
1,建立备份用账号(在主服上)
GRANT FILE,SELECT,SUPER,REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'rep'@'192.168.1.%' IDENTIFIED BY 'espnstar';

2,主服备份数据库
a)先锁表FLUSH TABLES WITH READ LOCK;
b)查看当前日志状态show master status;如下
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000018 |222989161 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

c)备份数据库
#mysqldump --user=root --password=espnstar --lock-tables zqwm5> /home/zqwm5_2.sql

d)配置文件修改,主要如下
server-id = 1
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql
#binlog-do-db=需要备份的数据库名,可写多行
#binlog-ignore-db=不需要备份的数据库名,可写多行


然后,配置从服
a)设置https://www.wendangku.net/doc/5614878760.html,f
主要参数如下

server-id=2
log-bin=mysql-bin
master-host=192.168.8.125
master-user=repluser1
master-password=111111
master-port=3306
replicate-do-db=test
replicate-ignore-db=test1
master-connect-retry=60
# replicate-do-db=test 需要备份的数据库名
# replicate-ignore-db=mysql 忽略的数据库
# master-connect-retry=60 如果从服务器发现主服务器断掉,重新连接的时间差(秒)

b)恢复数据库
创建数据库 create database zqwm5;
导入数据
mysql -u root -p zqwm5 < zqwm5_2.sql
c)
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.173',
-> MASTER_USER='rep',
-> MASTER_PASSWORD='espnstar',
-> MASTER_LOG_FILE='mysql-bin.000492',
-> MASTER_LOG_POS=523867153;

MASTER_LOG_FILE和MASTER_LOG_POS参考s4)中show master status;获得的值


d) 主服务器最后解锁表
mysql> UNLOCK TABLES;

e) 丛服务器
start slave;



查看状态
show master stauts;
show slave status\G;

#启用从库日志,这样可以进行链式复制
log-slave-updates

#从库是否只读,0表示可读写,1表示只读
read-only=1

#只复制某个表
replicate-do-table=tablename
##我的这次配置就是无意中限制了只能复制某一数据库导致失败的

#只复制某些表(可用匹配符)
replicate-wild-do-table=tablename%

#只复制某个库
replicate-do-db=dbname

#只复制某些库
replicte-wild-do-db=dbname%

#不复制某

个表
replicate-ignore-table=tablename

#不复制某些表
replicate-wild-ignore-table=tablename%

#不复制某个库
replicate-ignore-db=dbname

相关文档
相关文档 最新文档