【0】主从数据库操作的注意事项
1.从数据库只能做查询操作,禁止在从数据库上做 create、detele、update、insert等写入操作。
【1】前提条件
1.服务器mysql已经安装
192.168.106.174 mysql(主)
192.168.106.178 mysql(从)
【2】修改mysql(主)上的vim /etc/my.cnf文件,在[mysqld]下添加如下参数:
#每个server服务的标识,在master/slave环境中,此变量一定要不一样。
server-id=1
#此参数表示在事务提交时,处理重做日志的方式;此变量有三个可选值0,1,2:
#0:当事务提交时,并不将事务的重做日志写入日志文件,而是等待每秒刷新一次。
#1:当事务提交时,将重做日志缓存的内容同步写到磁盘日志文件,为了保证数据一致性,在replication环境中使用此值。
#2:当事务提交时,将重做日志缓存的内容异步写到磁盘日志文件(写到文件系统缓存中)。
innodb_flush_log_at_trx_commit=0
#1.控制master的是否开启binlog记录功能;
#2.二进制文件最好放在单独的目录下,这不但方便优化、更方便维护。
#3.重新命名二进制日志很简单,只需要修改[mysqld]里的log_bin选项。
log_bin=master-bin
#通过此来实现master自动删除binlog
expire_logs_days=14
【3】修改mysql(从)上的vim /etc/my.cnf文件,在[mysqld]下添加如下参数:
#每个server服务的标识,在master/slave环境中,此变量一定要不一样。
server-id=2
#此参数表示在事务提交时,处理重做日志的方式;此变量有三个可选值0,1,2:
#0:当事务提交时,并不将事务的重做日志写入日志文件,而是等待每秒刷新一次。
#1:当事务提交时,将重做日志缓存的内容同步写到磁盘日志文件,为了保证数据一致性,在replication环境中使用此值。
#2:当事务提交时,将重做日志缓存的内容异步写到磁盘日志文件(写到文件系统缓存中)。
innodb_flush_log_at_trx_commit=0
#1.控制master的是否开启binlog记录功能;
#2.二进制文件最好放在单独的目录下,这不但方便优化、更方便维护。
#3.重新命名二进制日志很简单,只需要修改[mysqld]里的log_bin选项,
log_bin=slaver-bin
#从库做为其他从库的主库时 log-slave-updates参数是必须要添加的,因为从库要作为其他从库的主库,必须添加该参数。从库开启log-bin参数,
#如果直接往从库写数据,是可以记录log-bin日志的,但是从库通过I0线程读取主库二进制日志文件,然后通过SQL线程写入的数据,是不会记录binlog日志的。
#也就是说从库从主库上复制的数据,是不写入从库的binlog日志的。所以从库做为其他从库的主库时需要在配置文件中添加log-slave-updates参数。
log-slave-updates
#主从复制时忽略的库,如果指定复制的库则使用replicate-do-db参数。
replicate_ignore_db=mysql
#通过此来实现master自动删除binlog
expire_logs_days=14
【4】
重启174 、178mysql数据库
【5】把174mysql(主)设置成主库,操作如下
使用Xshell或CRT软件连接174服务器,执行以下命令
#使用用户root和密码123456登陆mysql
mysql -uroot -p123456
#主服务器(174)上创建授权账户,允许从服务器(178)主机上连接
mysql> grant replication slave on*.*to'rep'@'192.168.106.178'identified by'123456';
#查看主库的当前binlog状态信息
mysql> show master status;
#退出mysql
mysql> quit;
【6】把178mysql(从)设置成主库,操作如下
使用Xshell或CRT软件连接178服务器,执行以下命令
#使用用户root和密码123456登陆mysql
mysql –uroot -p123456
--mysql -h 192.168.106.178 -uroot -p123456
#将主服务器(174)设为自己的主服务器,其中master_log_file和master_log_pos参数是根据show master status命令查出的主库当前binlog状态信息。
mysql> change master to master_host='192.168.106.174',master_user='rep',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=123;
#开启slave功能
mysql> start slave;
#查看从库的状态信息
mysql> show slave status\G
#退出mysql
mysql> quit;
【7】主从mysql的测试
1.在mysql(主)上创建测试库和测试表
#使用用户root和密码123456登陆mysql
mysql –uroot -p123456
#创建test_db1数据库
mysql> create database test_db1;
#选择test_db1数据库
mysql> use test_db1;
#在test_db1库下创建tab1表
mysql> create table test_table1(id int,name varchar(30));
#在tab1表中插入数据
mysql> insert into test_db1.test_table1(id,name) values(1,'zhangsan');
#提交
mysql> commit;
2.在mysql(从)上进行验证
#使用用户root和密码123456登陆mysql
mysql -uroot -p123456
#查询tab1表中的数据
mysql> select * from test_db1.test_table1
【8】常见故障排除
1.mysql(从)数据不同步,且Slave_SQL_Running: NO。
#使用用户root和密码123456登陆mysql
mysql -uroot -p123456
#查看从库的状态信息,主要关注Slave_IO_Running,Slave_SQL_Running,Last_SQL_Error等信息。
mysql> show slave status\G;
#停止slave
mysql> stop slave;
#设置跳过slave上sql的数量
mysql> set global sql_slave_skip_counter =1;
#启动slave
mysql> start slave;
#查看从库的状态信息,主要关注Slave_IO_Running参数是YES,Slave_SQL_Running参数是YES,Last_SQL_Error参数没有错误信息,则说明主从同步正常。
mysql> show slave status\G;