mysql主从服务器同步
假设主服务器的IP为:192.168.1.14 从服务器的IP为192.168.1.5
1.配置主服务器
首先配置主服务器的mysql配置文件my.ini
[mysqld]
#表示主服务器
server-id=1
#记录日志
log-bin=mysql-bin01
#提供数据同步的数据库,再次数据库下的数据可以同步
binlog-do-db=pension
#设置不提供数据同步的数据库,则次数据库下的数据不进行同步
binlog-ignore-db=mysql
#设置日志的过期时间
expire_logs_days=10
利用管理员身份登录命令提示符后,切换到mysql的安装目录bin文件所在的位置,我安装的位置是E:\mysql5.7\bin
然后输入mysql -uroot -p进行mysql的登录
(1) 输入 : show master status;
记住 file和position的值 ---一定要记住,后面需要用到
(2) 查看LOG_BIN的状态
输入:show variables like “%log_bin%”;
如果Log_bin为NO表示正常开启
(3) 创建主服务器用户及其权限
输入:grant replication slave on *.* to ‘mysql’@’192.168.1.5’identified by ‘123456’ with grant option;
注:这里创建了一个名为'mysql',密码为'123456'的用户,地址为从服务器地址,即只允许该用户拥有从地址192.168.1.5访问数据库并备份表的权限。
这里还要注意一点:replication 属于grant权限,后面只能用*.*,不能指定某个数据库或者某个数据表,如果指定类似select等普通权限可具体到数据表。
(4)重启主服务器
输入:mysql>flush privileges 刷新数据库
退出:quit;
重新进入mysql服务器:mysql -uroot -p
2.配置从服务器
进入从服务器mysql的配置文件my.ini
在[mysqld]节点下添加内容
#表示从服务器
server-id=2
#记录日志
log-bin=mysql-bin02
#需要同步的数据库
replicate-do-db=pension_center1
#同步数据库指定表(此处可以不设置)
replicate-do-db=pension_center1.test
#不记录日志的数据库
replicate-ignore-db=mysql
#设置日志的过期时间
expire_logs_days=10
(1) 从服务器获取权限
输入change master to
master_host='192.168.0.88',#主服务器地址
master_user='mysql',#主服务器数据库用户名
master_password='123456',#主服务器数据库密码
master_log_file='mysql-bin01.000001', #填写步骤1(1)中File项的值
master_log_pos=4880, #填写步骤1(1)中Position的值
master_port=3306;端口值
(2) 检查连接:
输入:show slave status\G;
如果:slave_IO_running和slave_sql_running同时为YES,则连接成功
(3)重启主服务器
输入:mysql>flush privileges 刷新数据库
退出:quit;
重新进入mysql服务器:mysql -uroot -p
(4)执行模式命令:
输入:start slave;
(5)执行查看进程状态的命令:
输入:show processlist;
查看User值为system user的项,如果其State值为“Waiting for master to send event”和”Slave has read all relay log: waiting for the slave I/O thread to update it“,则从服务器已连接主服务器。
(6)执行查看从服务器的运行命令状态
输入:show slave status\G;
如果Slave_IO_Running的值为Yes,Slave_SQL_Running的值为Yes,则从服务器正常运行。如果不正确,查看错误日志,一般位于data目录下。
3.测试
从服务器数据库中新建数据库pension,主服务器中新建表并插入数据,查看从服务器数据库,是否存在相同的数据库表及数据。
在主服务器中添加userinfo表并添加字段 测试如图:
在从服务器中查看
数据已经添加过来
此时注意:如果主服务已经有表结构的存在,则从服务器的表结构应和主服务器保持一致
中间可能遇到很多问题导致连接不成功,BUT!!!请耐心查看日志,进行 排查
4.错误原因,如果是:
这种情况Slave_SQL_Running: No
1.程序可能在slave上进行了写操作
2.也可能是slave机器重起后,事务回滚造成的.
一般是事务回滚造成的:
解决办法:
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;
这样就OK了。
Ok!!!同步继续