mysql配置,Mysql多主一从配置

以二主一从为例,
两台主 MySQL Server按照正常情况配置,唯一需要注意的是,端口需要与从服务器上对应的数据库配置的端口一致
修改/etc/my.cnf文档
将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/my.cnf
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指定配置文件my.cnf放在/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或是监听于不同的端口。他可以启动、停止和监控当前的服务状态。
程序在my.cnf(或是在--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
示例配置文件my.cnf
[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_multi --config-file=/etc/my.cnf start 1-2
或/usr/local/mysql/bin/mysqld_multi --config-file=/etc/my.cnf 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 _disibledevent=>
d)配置文件修改,主要如下
server-id = 1
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql
#binlog-do-db=需要备份的数据库名,可写多行
#binlog-ignore-db=不需要备份的数据库名,可写多行
然后,配置从服
a)设置my.cnf
主要参数如下
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
Tags: 

延伸阅读

最新评论

发表评论