环境:
centos:5.7
mysql:percona-server-5.6.23-72.1
操作步骤:
主库(自己选定一个mysql为主库):
建立一个专门用于同步的mysql账号和密码
*grant用法
grant 权限 on 数据库.* to 用户名@'登录主机' identified by '密码'
权限:
常用总结, ALL/ALTER/CREATE/DROP/SELECT/UPDATE/DELETE
数据库:
*.* 表示所有库的所有表
test.* 表示test库的所有表
test.test_table 表示test库的test_table表
用户名:
mysql账户名
登陆主机:
允许登陆mysql server的客户端ip
'%'表示所有ip
'localhost' 表示本机
'192.168.10.2' 特定IP
密码:
账户对应的登陆密码
*例子
mysql>grant all on test.* to lionbule@'%' identified by 'hello1234';
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安 全。
flush privileges;
查询master的状态
记录binlog的文件名和位置,开启binlog是在my.cnf配置文件中进行配置的,
binlog_format=MIXED #设置 binlog 的格式为 MIXED
log-bin = /data/3306/mysql-bin
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
配置从服务器Slave:
这里边的master_host指的是mysql主节点的ip地址,同步的时候记得要关闭防火墙,不然容易失败
master_user,master_password是在上个步骤建立的专门用于同步的账户用户名和密码
master_port指的是mysql主节点的端口号
master_log_file,master_log_pos,这两个配置是上一步通过show master status来查询到的
change master to master_host='192.168.0.201',master_user='mysync',master_port=3307,master_password='q123456',master_log_file='mysql-bin.000001',master_log_pos=120; //注意不要断开,“120”无单引号。
上一步sql执行成功以后, 开启从节点功能
start slave; //启动从服务器复制功能
查看从节点状态:
show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql主从复制原理
该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。