mysql主从配置

mysql基本操作

Posted by 大可乐 on November 20, 2018

数据库主从配置

注意事项:多个mysql安装在不同的服务器中,检查防火墙,确保服务器之间的网络畅通,在开启主从同步前,请确保主库和从库的数据完全相同,通常将主库的数据文件直接打包 复制到从库,如果使用虚拟机实验,配置直接复制虚拟机文件会更方便。

配置详情

  1. 安装mysql
1
2
apt-get update
apt-get install mysql-server mysql-client
  1. 配置my.cnf文件,设置服务器id,并开启binlog日志。(注意:mysql集群中的服务器id必须不同,大小从1到整形最大值) 主库设置
1
2
3
[mysqld]
server-id=master_server_id
log-bin=binlog_name

从库设置

1
[mysqld] server-id=slave_server_id
  1. 创建从库同步数据使用用户
1
CREATE USER 'username'@'192.168.1.%' IDENTIFIED BY 'password';
  1. 为用户分配权限
1
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_host'; 
  1. 连接到主服务器并通过执行SHOW MASTER STATUS 语句确定当前的复制坐标;
1
2
3
4
FLUSH TABLES;
SHOW MASTER STATUS;

>> 请记住File 和 position值(如file=mysql-bin.000001,position=294),因为稍后还需要使用它们来告诉从服务器从哪个位置开始读取 主服务器的二进制日至里的事件。重要注意事项在主服务器上,在从确定其复制坐标到制作出将被传输到从服务器的初始复制的这段时间里面,一定要保证主服务器上的数据库里的数据没有发生任何的修改
  1. 在从服务器上为将被复制的数据库建立一份完备的副本。把主服务器上的数据库复制到从服务器以完成主,从服务器之间最初的同步。一种办法是现在主服务器上制作一份备份,在把这个备份加载到从服务器上去;另一种办法是通过网络把各个数据全部复制到从服务器。如果你还没有在主服务器上创建任何数据库或数据表,可以省略这一部,因为它现在还没有任何需要复制的东西

  2. 连接到从服务器并使用CHANGE MASTER语句来配置它 这包括把用来连接主服务器的参数和初始复制坐标告诉从服务器

1
2
3
4
5
6
7
8
9
10
11
12
CHANGE MASTER TO MASTER_HOST='192.168.0.104', //MASTER 服务器IP
MASTER_PORT=3306,
MASTER_USER='test',
MASTER_PASSWORD='password', 
MASTER_LOG_FILE='MASTER-BIN.000001',//MASTER服务器产生的日志
MASTER_LOG_POS=0;

>> MASTER_USER 是刚刚创建的用户名和密码  从服务器将使用这个账户来连接主服务器并请求主服务器修改信息.
MASTER_LOG_FILE 和 MASTER_LOG_POS  是刚才用SHOW MASTER STATUS 语句查出来的值

>> 在UNIX 系统上,使用localhost作为主机名将使用一个套接字文件去连接主服务器,但复制机不支持经套接字文件建立的连接,因此,如果主服务器和从服务器将运行在同一台主机上就必须把这个主机写成127.0.0.1 而不是

  1. 启动主从复制
1
2
3
4
5
6
7
START SLAVE;

>> 从服务器将连接主服务器开始复制 你可以在从服务器上使用SHOW SLAVE STATUS 语句来查看它的工作状态

>> 从服务器把CHANGE  MASTER 语句所给出的参数保存在其数据目录中的一个名为master.info 的文件里以记录初始复制状态 并随着镜像工作的进展而刷新那个文件 等以后所需要改变复制参数的时候 只要连接到从服务器并通过CHANGE MASTER 语句给出新的设置 从服务器就会根据新的设置自动刷新master.info文件
 
>> 保存在master.info 文件里的信息包括用来连接主服务器的用户名和口令 这些信息应该是保密的 所以应该把这个文件设为只允许从服务器mysql管理员的登录账户才能访问

可以把mysql数据排除在复制机制外 这需要做两件事情

(1) 在把数据库的初始数据从主服务器的时候 不要把整个mysql数据库也包括在内 另一个办法是在传输之前先备份从服务器的mysql数据库 等传输工作完成后再恢复它

(2) 在从服务器的选项文件里加上以下代码 让它不要执行来自主服务器对mysql数据库的任何修改

1
2
[mysqld]
replicate-ignore-db-mysql 

如果想让从服务器忽略多个数据 需要多次使用replication.ignore db 选项—每个数据库一次 还有一个办法是在主服务器端(注意 不是从服务器) 使用binlog-ignore-db 选项排除数据库 这个办法的优点是可以减少从主服务器传输到从服务器的信息量 缺点是主服务器上的二进制文件将不包含那些被排除再外的数据库的任何信息 而这些信息对主服务器在发生崩溃后的数据恢复工作往往至关重要 因此 在从服务器端把数据库排除在外的做法更值得选择

重要命令

SHOW SLAVE STATUS 语句 在从服务器上查看其复制机制是否在工作以及当前的复制坐标 复制坐标可以用来判断主服务器上的哪几个二进制日志里面已经不会被用到 PURGE MASTER语句 在主服务器上对二进制日志文件进行失效处理 在每一个从服务器上都通过SHOW SLAVE STATUS 语句确定了哪些日志文件不会再用之后,你可以在主服务器上用这条语句把那些二进制日志文件进行删除掉

STOP SLAVE 和 START SLAVE 语句 用来挂起和停止服务