Master:192.168.1.101
Slave :192.168.1.102
单向同步(一)
-
进入Master启动MYSQL
-
[root@localhost
~]# service mysqld start -
Starting
MySQL [ OK ]
-
[root@localhost
-
进入Mysql命令行模行 -
[root@localhost
~]# mysql -uroot -p -
Enter
password: -
Welcome
to the MySQL monitor. Commands end with ; or \g. -
Your
MySQL connection id is 9 to server version: 5.0.22-log -
-
Type
'help;' or '\h' for help. Type '\c' to clear the buffer. -
-
mysql>
-
[root@localhost
-
为slave用户添加同步专用权限
-
mysql>
GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO 'replication'@'192.168.1.102' identified by '123456'; -
Query
OK, 0 rows affected (0.01 sec) -
-
mysql>
Flush privileges; -
Query
OK, 0 rows affected (0.00 sec)
-
mysql>
-
创建更新日志文件
-
mkdir
/var/log/mysql -
chmod
-R 775 /var/log/mysql -
chown
-R mysql:mysql /var/log/mysql
-
mkdir
-
配置/etc/my.conf
log-bin=mysql-bin 启用二制日志系统 server-id=1 ID 标示为主,master_id必须为1到232–1之间的一个正整数值 binlog-ignore-db=mysql,test 设置需要忽略同步数据库 binlog-do-db=skydb or name.table 设置需要同步的数据库或同步的表,如果多个库,每个库增加一行. log-bin=/var/log/mysql/updatelog 设置log日志文件名 -
本导入数据库
-
service
mysqld stop -
-
cd
/var/lib/mysql tar -jxf skydb.tar.bz2 -
-
#如果需要冷copy
那么直接把数据完程复制到SLAVE上(可选) -
scp
skydb.tar.bz2 root@192.168.1.102:/var/lib/mysql -
-
service
mysqld start
-
service
-
配置SLAVE /etc/my.cnf
server-id = 2 Master 与Slave的不能相同 master-host = 192.168.1.101 指定MASTER地址 master-user = replication 同步用户名 master-password = 123456 同步密码 master-port = 3306 同步端口 master-connect-retry=60 断开重新连接等待时间 replicate-ignore-db=mysql 屏蔽需要同步数据库 replicate-do-db= skydb
relay-log=slave-relay-bin同步数据库
生成日志文件
-
cd
/var/lib/mysql -
tar
-jxf sky.tar.bz2
-
[root@localhost
~]# mysql -uroot -p -
Enter
password: -
Welcome
to the MySQL monitor. Commands end with ; or \g. -
Your
MySQL connection id is 4 to server version: 5.0.22-log -
-
Type
'help;' or '\h' for help. Type '\c' to clear the buffer. -
-
mysql>
slave stop; -
Query
OK, 0 rows affected (0.00 sec) -
-
mysql>
show master status; #这句是在MASTER服务器里面执行 -
+------------------+----------+--------------+------------------+
-
|
File | Position | Binlog_Do_DB | Binlog_Ignore_DB | -
+------------------+----------+--------------+------------------+
-
|
updatelog.000004 | 98 | | | -
+------------------+----------+--------------+------------------+
-
1
row in set (0.00 sec) -
-
mysql>
CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000004',MASTER_LOG_POS=98; -
Query
OK, 0 rows affected (0.01 sec) -
-
mysql>
slave start; -
Query
OK, 0 rows affected (0.00 sec)
-
change
master to master_host='192.168.1.101', master_user='replication', master_password='123456',master_log_file='updatelog.000001', master_log_pos=98;
-
show
slave status\G -
Slave_IO_Running:
YES -
Slave_SQL_Running:
YES
配置同步(二)
|
server-id = 2 |
|
| master-host = 192.168.1.101 |
|
|
master-user = replication | 制定在主服务器上可以进行同步的用户名 |
|
master-password = 123456 |
|
|
master-port = 3306 |
同步所用的端口 |
|
master-connect-retry=60 |
断点重新连接时间 |
|
replicate-ignore-db=mysql | 屏蔽对 mysql 库的同步 |
| replicate-do-db=skydb |
同步数据库名称 |
| relay-log=slave-relay-bin | 启用日志 |
|
log-bin=/var/log/mysql/updatelog | 设定生成log文件名 |
|
binlog-do-db=db1 |
|
|
binlog-ignore-db=mysql | 避免同步mysql用户配置 |
|
auto_increment_offset
auto_increment_increment
| 双向同步必免建值冲突 |
1:解决两个mysql数据库双向同步的键值冲突问题
-
出现的问题(多主自增长ID重复)
-
1:首先我们通过A,B的test表结构
-
2:掉A,在B上对数据表test(存在自增长ID)执行插入操作,返回插入ID为1
-
3:后停掉B,在A上对数据表test(存在自增长ID)执行插入操作,返回的插入ID也是1
-
4:然后
我们同时启动A,B,就会出现主键ID重复 -
-
解决方法:
-
我们只要保证两台服务器上插入的自增长数据不同就可以了
-
如:A查奇数ID,B插偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了
-
-
在这里我们在A,B上加入参数,以实现奇偶插入
-
-
A:my.cnf上加入参数
-
-
auto_increment_offset
= 1 -
auto_increment_increment
= 2 -
这样A的auto_increment字段产生的数值是:1,
3, 5, 7, …等奇数ID了 -
-
B:my.cnf上加入参数
-
-
auto_increment_offset
= 2 -
auto_increment_increment
= 2 -
这样B的auto_increment字段产生的数值是:2,
4, 6, 8, …等偶数ID了 -
-
可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment
= N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID 重复。
本文详细介绍了如何在MySQL环境中实现主从服务器的同步,包括启动MySQL服务、配置权限、创建更新日志文件、配置my.cnf文件、同步数据库、验证同步状态以及解决可能遇到的问题。

1万+

被折叠的 条评论
为什么被折叠?



