在配置Mysql数据库主从复制集群的时候
1.主从服务器操作系统版本和位数一致。
2.Mysql版本一致。
为了保证稳定性,最好服务器操作系统和Mysql数据库环境一致。
MySQL服务器配置复制很简单 由于场景不同 基本步骤还是有差异的 最基本的场景是新安装的主库和备库
总的来说分为以下几步:
1.每台服务器上创建复制账号
2.配置主从库
3.通知备库连接到主库并从主库复制数据
创建复制账号
MySQL会赋予一些特殊权限给复制线程。在备库运行的IO线程会建立一个到主库的TCP/IP连接 意味着必须在主库建一个用户 :
create user 'mastj'@'192.168.1.%' identified by 'mysql';
grant replication slave,REPLICATION CLIENT on *.* to 'mastj'@'192.168.1.%' identified by 'mysql';
REPLICATION CLIENT:用来监控和管理复制的账号
在主库建立账号 从主库将数据克隆岛备库 备库也设置好了(主库的设置)
配置主备库:
1.配置master的my.cnf
[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则表示全备数据库
sync_binlog=1 如果开启该选项 MySQL每次在提交事务前会将二进制日志同步到磁盘上 保证在服务器崩溃时不会丢失事件 如果禁止该选项 服务器会少做一些工作 但二进制日志文件可能在服务器崩溃时损失或丢失
备库配置:
server_id=2
relay_log=/mysql/log/3306/relay_log
log_slave_updates=1
read_only=1
relay_log:指定中继日志的位置和命名
log_slave_updates:允许备库将其重放的事件也记录到自身的二进制日志中
read_only:可以阻止大部分用户更改非临时表 除了复制SQL线程和其他拥有超级权限的用户外
即使开启了以上选项 备库仍然有可能在崩溃后被中断 因为master.info和中继日志文件都不是崩溃安全的 最好设置以下选项:
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1
若orders数据库中已经有数据,还需要:
锁定数据库
mysql> flush tables with read lock;
将数据导入到从数据库,方法有多种,我是用Navicat复制的,复制完成后:
查看master状态并解锁:
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;
启动复制:
- 执行备库 :
mysql> change master to master_host='192.168.1.238',
master_user='mastj',
master_password='mysql',
master_port=3306,
master_log_file='itpuxdb-binlog.000002',#注意配置好名称会出错
master_log_pos=154,
master_connect_retry=10;
参数详解:
master_host:主服务器的IP。
master_password:用户密码
master_port:主服务器mysql端口,如果未曾修改,默认即可。
master_log_file:日志文件名称,填写查看master状态时显示的File
master_log_pos:日志位置,填写查看master状态时显示的Position
master_connect_retry:重连次数
2.启动进程
sql
mysql> start slave;
mysql> show slave status\G
—————检查主从复制状态——————
或者在主库上可以看到由备库IO线程向主库发起的连接
SHOW PROCESSLIST;
备库的两个线程
SHOW PROCESSLIST;
若Slave_IO_Running和Slave_SQL_Running均为Yes,则表示连接正常。
此时就可以测试主从复制了。