MYSQL主从复制实战
Mysql主从复制原理
1.Mysql主从复制目的是为了备份主库数据,方便及时恢复数据,分担主库压力。
2.Mysql主从复制属于异步复制过程,整个过程需要开启三个线程:Master侧开启I/O线程,Slave侧开启I/O、SQL线程。
3.Master侧开启bin-log二进制日志功能,bin-log日志主要用来记录增、删、改、更新操作的SQL语句。
4.Slave侧通过I/O线程来读取Master的bin-log文件内容,并把内容存储在本地的中继日志relay-log中,同时会写入master.info文件(该文件记录master IP、端口、同步的用户名、密码、bin-log文件名以及最新的position位置点),供下次数据同步使用。
5.Slave侧SQL线程检测到中继日志内容有更新,解析更新的SQL语句,并在本地数据库执行,保持Slave和Master数据同步的。
主从复制安装配置
1.系统环境准备
Master:192.168.241.133
Slave:192.168.241.135
2.安装
源码安装参考: http://blog.****.net/scott_bing/article/details/78261789 Yum安装: yum install mysql-server mysql-devel mysql-libs -y CentOS6.x YUM安装 yum install mariadb-server mariadb mariadb-libs -y CentOS7.x YUM安装 |
3.Master侧配置
在/etc/my.cnf中[mysqld]下添加以下代码,配置完后重启mysql服务
server-id = 1 log-bin = mysql-bin |
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size =256M max_allowed_packet= 1M table_open_cache= 256 sort_buffer_size= 1M read_buffer_size= 1M read_rnd_buffer_size= 4M myisam_sort_buffer_size= 64M thread_cache_size= 8 query_cache_size=16M thread_concurrency= 8 log-bin=mysql-bin binlog_format=mixed server-id = 1 [mysqldump] quick max_allowed_packet= 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size =128M sort_buffer_size= 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout |
创建供Slave库进行同步的用户、密码,执行如下命令,最后查看主库的状态
grant replication slave on *.* to 'tongbu'@'%' identified by '123456'; flush privilege; 执行show master status 查看主库的状态 |
在/etc/my.cnf中[mysqld]段添加以下代码:
server-id = 2 该值配置与master不一致即可 |
/etc/my.cnf完整配置:
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] server-id = 2 port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size =256M max_allowed_packet= 1M table_open_cache= 256 sort_buffer_size= 1M read_buffer_size= 1M read_rnd_buffer_size= 4M myisam_sort_buffer_size= 64M thread_cache_size= 8 query_cache_size=16M thread_concurrency= 8 [mysqldump] quick max_allowed_packet= 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size =128M sort_buffer_size= 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout |
Slave指定Master IP、用户名、密码、bin-log文件名(mysql-bin.000010)及position(120),代码如下:
change master to master_host='192.168.241.133',master_user='tongbu',master_password='123456',master_log_file='mysql-bin.000010',master_log_pos=120; |
start slave; show slave status; Slave_IO_Running: Yes Slave_SQL_Running: Yes |
Master侧创建db_test数据库和tb_01表,命令如下:
create database db_test charset=utf8; show databases; use db_test; create table tb_01(id varchar(20),name varchar(20)); show tables; |
Slave侧查看是否有数据库db_test和表tb_01,若有则表示Slave从Master复制数据成功