Linux下配置mysql主从数据库

一、需求

    首先公司用的是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;  #查看主服务器


Linux下配置mysql主从数据库_第1张图片

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目录下面


scp上传文件

从服务器(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';

Linux下配置mysql主从数据库_第2张图片
验证

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    主键重复

Linux下配置mysql主从数据库_第3张图片
同步错误

解决:通过修改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';可以解决

你可能感兴趣的:(Linux下配置mysql主从数据库)