您的位置:首页 > 数据库 > MySQL

MySQL的主从复制配置

2013-06-13 18:36 183 查看
在这里分两个情况:1、两台服务器中都没有数据 2、主服务器上已经有数据,此时再开启从服务器
一、两台服务器中都没有数据
在复制结构中从服务器的mysql的版本要比主服务器的一样或者高也行。
主mysql的ip是192.168.0.1
从mysql的ip是192.168.0.2
端口都是:3306
mysql的版本5.1.61源码编译安装

1.主服务器执行如下
修改配置文件:
在/etc/my.cnf中添加启动二进制文件
[client]
port = 3306
socket = /tmp/mysql.sock

[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /usr/local/mysql/var
skip-locking
wait_timeout = 30
table_lock_wait_timeout = 30
#skip-grant-tables
key_buffer = 384M
max_allowed_packet = 32M
table_cache = 128M
sort_buffer_size = 8M
net_buffer_length = 8K
read_buffer_size = 8M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size = 16M
thread_cache_size = 64
thread_stack = 512k
query_cache_size = 64M
tmp_table_size = 256M
log-error=log-error.log

log-bin=mysql-bin #二进制日志,主库必须开启

#哪个数据库不需要复制
binlog-ignore-db=test
binlog-ignore-db=mysql
binlog-ignore-db=information_schema

server-id=100 #默认是1,服务器ID号,整数值,保证唯一标识一台服务器就可以

进入主mysql执行如下语句
在主服务器上创建复制帐号,授予相应的权限。注意,复制帐号的口令最好不要超过6位,而且不要带"#"等特殊字符。
mysql>grant replication slave on *.* to 'backup'@'192.168.0.2' identified by '123456';
mysql>FLUSH PRIVILEGES;
创建backup用户,并授权给192.168.0.2使用
查询主数据库状态,并记下FILE及Position的值
show master status;
修改完成后重新启动mysql服务

2.从服务器执行如下
在/etc/my.cnf的mysqld下添加
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
port=3306
socket=/tmp/mysql.sock
datadir=/usr/local/mysql/var

master-host=192.168.0.1 #主库地址,必须使用IP,不能使用域名
master-user=backup #从库连接主库使用该用户名
master-password=123456
master-connect-retry #选项控制重试间隔。默认为60秒。

table_lock_wait_timeout=30
wait_timeout=30
skip-locking

key_buffer = 384M
table_cache = 128M
sort_buffer_size = 8M
read_buffer_size = 8M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size = 16M
thread_cache_size = 64
thread_stack = 512K
query_cache_size = 64M
tmp_table_size = 256M
max_allowed_packet = 32M #任何生成的中间字符串的最大大小。默认为16M,最低配置32M,且不能小于主库该项的值
read-only #设置从服务器为只读的,避免在从库上进行写操作,导致主从数据不一致
skip-slave-start #启动数据库后,需手动开启同步进程

log-error=log-error.log

#log-bin=mysql-bin #关掉二进制日志
server-id=200 ##id号一定不能与主服务器的id号相同
添加如下内容: ##这些是开启中继日志的
relay-log=relay-bin #中继日志,从库开启
relay-log-index=relay-bin.index

设置忽略复制系统数据库
#replicate-do-db= #需要同步的表,多个表需要多次指定,如果不明确指定禁止复制,默认就是允许复制
replicate-ignore-db=test #不需要同步的表,多个需要多次指定
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
#replicate-ignore-db=test,mysql,information_schema #不需要记录日志的数据库名,多个数据库中间用逗号(,)隔开
replicate-wild-do-table = example1.% #需要同步的表,支持正则表达式,数据库example1下的所有表
replicate-do-table = example1.table1 #需要同步的表,多个表需多次指定,数据库example1下的table1
replicate-wild-ignore-table = mysql.% #不需要同的表,多个表需要多次指定
replicate-wild-ignore-table = test.%
replicate-rewrite-db = from_name->to_name #同步库重命名
slave-net-timeout = 3600 #在所设置的时间内如果没有接收到来自主库的更新,从库则认为和主库的连接断开或失效,重新建立和主库的连接,默认为3600秒,可根据实际需求调整

退出从新启动从服务器/etc/init.d/mysqld restart or service mysqld restart
登陆从服务器执行如下语句
mysql>slave stop;
mysql>change master to
mysql>master_host='192.168.0.1',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=98;
注意:mysql-bin.00001和master_log_pos是在主服务器上查询的 mysql>show master status;
启动同步
mysql>start slave;
mysql>show slave status\G;
如果出现以下结果表明连接成功,则连接失败。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

二、主服务器上已经有数据,此时再开启从服务器

1、 在开启从服务器之前要先把主服务器上的数据导入从服务器中。所以要先备份一下主服务器上的数据
# mysqldump -uroot -p --all-database > /tmp/all.sql

2、将备份复制到从服务器中
# scp /tmp/all.sql 192.168.0.2:/tmp/

3、在从服务器上,把备份导入服务器中
# mysql -uroot -p < /tmp/all.sql
Enter password:

4、下面就可以连接了,但是在连接之前要先查看备份的文件
用命令head来查看
# head -30 /tmp/all.sql ##查看前30行的
有一行是:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
说明要备份的位置是:MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98
所以在连接之前一定要说明这个位置

5、下面来开始备份
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='backup',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;
返回的结果:Query OK, 0 rows affected (0.02 sec)
说明备份成功

6、下面就可以启动从服务器了
mysql>start slave;
mysql>show slave status\G ##查看从服务器的状态是否连接成功
如下所示说明成功连接:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

最后再来测试一下。 在主服务器上创建或者删除数据库、表,就可以同步到从服务器上了。
mysql>create database aa;
mysql>use aa;
mysql>create table t1 (id int,name char(10));
mysql>insert t1 values (1,'han');
在从服务器上查看是否同步成功
mysql>show databases;
mysql>use aa;
mysql>select * from t1;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: