在两台服务器上安装mysql
为黄梅等地区用户提供了全套网页设计制作服务,及黄梅网站建设行业解决方案。主营业务为做网站、成都网站设计、黄梅网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
#apt-get install mysql-server -y
创建同步帐户
我这里就直接使用的数据库默认用户root
在ubuntu4上:
mysql grant replication slave on *.* to 'root'@'192.168.2.5' identified by '12345678';
mysql flush privileges;
在ubuntu5上:
mysql grant replication slave on *.* to 'root'@'192.168.2.4' identified by '12345678';
mysql flush privileges;
修改mysql的配置文件
/etc/mysql/my.cnf
在Ubuntu4 上:
【code】
[mysqld]
binlog-do-db=db_rocky #需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
binlog-ignore-db=mysql #不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
replicate-do-db=db_rocky #需要进行同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-do-db选项
replicate-ignore-db=mysql,information_schema #不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个replicate-ignore-db选项
#同步参数:
server-id=1
log_bin = /var/log/mysql/mysql-bin
#保证slave挂在任何一台master上都会接收到另一个master的写入信息
log-slave-updates
sync_binlog=1
auto_increment_offset=1
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误
【/code】
在Ubuntu5上:
[mysqld]
server-id=2 #设置一个不同的id、注意这里在my.cnf里面有个默认值是 1 、把默认值改掉、而不能新增一个server-id
binlog-do-db=db_rocky #需要记录二进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
binlog-ignore-db=mysql #不需要记录进制日志的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-ignore-db选项
#需要同步的数据库
replicate-do-db=db_rocky
#需要进行同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
replicate-ignore-db=mysql,information_schema #不需要同步的数据库.如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
#同步参数:
#保证slave挂在任何一台master上都会接收到另一个master的写入信息
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
slave-skip-errors=all #过滤掉一些没啥大问题的错误
分别重启服务器上的mysql服务
分别在服务器上查看做为主服务器状态
mysql flush tables with read lock;#防止进入新的数据
mysql show master status\G;
分别在服务器上用change master语句指定同步位置 :
在ubuntu4上:
change master to master_host='192.168.2.5',master_user='root',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=107;
在Ubuntu5上:
change master to master_host='192.168.2.4',master_user='root',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=107;
在配置Mysql数据库主从复制集群的时候要保证:
1.主从服务器操作系统版本和位数一致。
2.Mysql版本一致。
为了保证稳定性,最好服务器操作系统和Mysql数据库环境一致。
CentOS服务器上Mysql的安装方法可以参见博客:
服务器配置:
Master:192.168.1.18
Slave:192.168.1.16
Master(192.168.1.18)服务器:
1.编辑/etc/my.cnf
[root@jhq0229 ~]# vim /etc/my.cnf
2.配置
[plain] view plain copy print?
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#主从复制配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要备份的数据库
binlog-do-db=orders
#不需要备份的数据库
binlog-ignore-db=mysql
#启动二进制文件
log-bin=mysql-bin
#服务器ID
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。
3.重启Mysqld服务
[root@jhq0229 ~]# service mysqld restart
4.为从Mysql创建用户
登录
[root@jhq0229 ~]# mysql -uroot -p
Enter password:
创建用户
mysql create user 'mastj'@'192.168.1.16' identified by '123456';
配置主从复制权限
mysql grant replication slave on *.* to 'mastj'@'192.168.1.16' identified by '123456';
若orders数据库中已经有数据,还需要:
锁定数据库
mysql flush tables with read lock;
将数据导入到从数据库,方法有多种,我是用Navicat复制的,复制完成后:
查看master状态并解锁:
[html] view plain copy print?
mysql show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 2005 | orders | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql unlock tables;
Slave(192.168.1.16)服务器:
1.配置服务ID
[root@jhq0113 ~]# vim /etc/my.cnf
在[mysqld]下面加入
server-id=2
重启Mysql服务
[root@jhq0113 ~]# service mysqld restart
2.配置复制
登录mysql
[root@jhq0113 ~]# mysql -uroot -p
执行
mysql change master to master_host='192.168.1.18',
master_user='mastj',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=2005,
master_connect_retry=10;
参数详解:
master_host:主服务器的IP。
master_user:配置主服务器时建立的用户名
master_password:用户密码
master_port:主服务器mysql端口,如果未曾修改,默认即可。
master_log_file:日志文件名称,填写查看master状态时显示的File
master_log_pos:日志位置,填写查看master状态时显示的Position
master_connect_retry:重连次数
启动进程
mysql start slave;
检查主从复制状态
[plain] view plain copy print?
mysql show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.18
Master_User: mastj
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 2369
Relay_Log_File: jhq0113-relay-bin.000002
Relay_Log_Pos: 647
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
若Slave_IO_Running和Slave_SQL_Running均为Yes,则表示连接正常。
此时就可以测试主从复制了。
1、挑选一台服务器作为新主库
可以是现有的slave,也可以是新扩容出来的slave,但是归根结底它的角色是slave
2、在new master上设置log-slave-update,用来记录中继的binlog。
3、交替使用slave start until 和 change master to命令,将现有结构从A-B 切换成A-B-C结构,即级联结构。
其中A=old master,B=new master,C=slaves
4、设定new master的read_only=OFF,保证新主库可写
5、建立old master和new master的双主结构,保证切换失败之后可以回退,并且数据一致。
需要注意的时auto_increment,如果有字段有这个属性,需要在old 和 new master上分别设置如下来规避自增冲突。