一、需求
首先公司用的是windows系统,数据库为SQL Server,但是因为数据获取速度问题,需要换成Linux系统+mysql数据库,为了测试是否能提高性能,就在两台服务器(windows)安装虚拟机,然后安装Linnux操作系统Ubuntu,并安装mysql。
二、准备
两台服务器:winserver2008 + ubuntu(192.168.20.8)+mysql 主服务器
win10 +ubuntu(192.168.20.3)+mysql 从服务器
同步数据库名:MyHz
同步账号:myslave
同步密码:123456
tip:此时192.168.20.8已经有MyHz数据库
三、配置
主服务器(192.168.20.8)
1.修改mysql配置文件
vi /etc/mysql/my.cnf
#键入 /server-id 找到server-id的位置,把以下内容对照设置进去,键入 i,激活输入状态
#注意,这里的Master与Slave的server-id不能相同
server-id = 1
log_bin = mysql-bin
binlog_do_db = MyHz #如果需要同时同步多个数据库,请另起一行设置binlog_do_db =需要同步的数据库名称
binlog_ignore_db = mysql
2.验证设置
service mysqld restart#重启MySQL
mysql -u root -p#进入mysql控制台
show variables like 'server_id';#查看server-id的值是否为1
mysql> show variables like 'server_id';
mysql> show master status; #查看主服务器
tip:这里记住File的值:mysql-bin.000001和Position的值:1599,后面会用到。
2.建立用于replication的账号,赋予从库权限帐号,允许用户在主库上读取日志,赋予192.168.20.3也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以
GRANT FILE ON *.* TO 'myslave'@'192.168.20.3' IDENTIFIED BY '123456';
grant replication slave on *.* to 'myslave'@'192.168.20.3' identified by '123456' ;#授权用户slave从192.168.20.3(从服务器)访问数据库,只具有备份的权限,grant replication on 数据库名.表名(*表示数据库的所有表)
flush privileges; 刷新系统授权表
3.导出MyHz数据库(在终端进行,不是在mysq内)
mysqldump -u root -p --default-character-set=utf8 --opt -Q -R --skip-lock-tables MyHz > /home/hnc/MyHz.sql
#在MySQL主服务器进行操作,导出数据库MyHz到/home/MyHz.sql(在终端执行,而不是在mysql内执行)
4.上传MyHz.sql文件到从服务器的/home
scp /home/hnc/MyHz.sql 'hnc'@192.168.20.3:/home
#把home/hnc目录下的MyHz.sql 数据库文件上传到MySQL从服务器的home目录下面
从服务器(192.168.20.3)
1.修改mysql配置文件
#具体的路径以及版本都与Master服务器一样
vi /etc/mysql/my.cnf
#请对照设置,如下
user = mysql
log-bin = mysql-bin
server-id = 2
replicate-do-db = MyHz
replicate-ignore-db = mysql
2.验证设置
mysql> show variables like 'server_id';
tip:需要验证,如果server_id设置失败,最后同步的时候有Slave_IO_Running=No失败
3.导入MyHz.sql到从服务器数据库
mysql -u root -p#进入从服务器MySQL控制台
create database MyHz;#创建数据库
use MyHz#进入数据库
source /home/MyHz.sql#导入备份文件到数据库
4.执行同步
slave stop;#停止slave同步进程
change master to master_host='192.168.20.8',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000011',master_log_pos=1599;#执行同步语句
slave start;#开启slave同步进程
SHOW SLAVE STATUS\G#查看slave同步信息
若 Slave_IO_Running: Yes
Slave_SQL_Running: Yes
则 同步成功 !
Tip:
遇到错误:Slave_IO_Running:No 从服务器设置server_id失败
解决:
1.stop slave
2.set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
3.start slave
遇到错误:Slave_SQL_Running:No 主键重复
解决:通过修改mysql的配置文件,让从库的同步线程忽略这个错误,方法:修改mysql配置文件 /etc/my.cnf 在 [mysqld]下加一行 slave_skip_errors = 1062 ,保存.重启mysql. mysql slave可以正常同步了.
遇到错误:Slave_SQL_Running:Connecting
解决:未给myslave用户赋予查看文件的权限,导致连接失败,通过GRANT FILE ON *.* TO 'myslave'@'192.168.20.3' IDENTIFIED BY '123456';可以解决