linux系统下实现mysql热备份详细步骤(mysql主从复制)_MySQL
bitsCN.com
主从的作用:
1.可以当做一种备份方式
2.用来实现读写分离,缓解一个数据库的压力
MySQL主从备份原理:
Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。
如果想配置成为同一台上的话,注意安装的时候,选择两个不同的prefix=路径,同时开启服务器的时候,端口不能相同。
(1)首先确保主从服务器上的Mysql版本相同(做主从服务器的原则是,MYSQL版本要相同,如果不能满足,最起码从服务器的MYSQL的版本必须高于主服务器的MYSQL版本 )
(2)在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY
'123456';
Query OK, 0 rows affected (0.13 sec)
[原理]master 上提供binlog ,
slave 通过 I/O线程从 master拿取 binlog,并复制到slave的中继日志中
slave 通过 SQL线程从 slave的中继日志中读取binlog ,然后解析到slave中
主从复制大前提
需要master与slave同步,因为笔者的数据库数据量不大,所以无需考虑太多,直接把
master上的data复制到了slave上,但是如果是大的数据量,比如像taobao这个的系统
实验环境准备:
OS: CentOS5.4
Mysql:Mysql-5.0.41.tar.gz
辅助工具:SSH Secure Shell Client
两台测试IP&服务器:
Master Server: 192.168.1.2/Linux CentOS5.4/MYSQL 5.0
Slave Server: 192.168.1.3/Linux CentOS5.4/MYSQL 5.0
安装配置步骤:
1、首先在Linux环境下分配好磁盘分区以便留足MySQL数据库的备份空间
[root@vps mysql]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 30G 2.0G 29G 7% /
2、MySQL数据库的安装:
1>将Mysql-5.0.41.tar.gz通过SSH 工具 上传到Linux系统的home目录下
2>建立MySQL使用者和群组:
#groupadd mysql
#useradd -g mysql mysql
3>解压缩Mysql-5.0.41.tar.gz源码包
#cd /usr/local/sofrware
#tar zxvf Mysql-5.0.41.tar.gz
4>进入源码目录编译安装
#cd /home/Mysql-5.0.41
#./configure --prefix=/usr/local/mysql --with-charset=gbk |注:配置Mysql安装路径并且支持中文
#make |注:编译
#make install |注:编译安装
5>替换/etc/my.cnf文件,进入源码包,执行命令
#cd /home/Mysql-5.0.41
#cp support-files/my-medium.cnf /etc/my.cnf
6>完成以上操作以后进行初始化数据库,进入已经安装好的mysql目录
#cd /usr/local/mysql
#bin/mysql_install_db --user=mysql |注:--user=mysql 初始化表并且规定用mysql用户
7>设置给mysql和root用户设定访问权限 我们先进入mysql目录
#cd /usr/local/mysql
#chown -R root /usr/local/mysql 注:设定root能访问/usr/local/mysq
#chown -R mysql /usr/local/mysql/var 注:设定mysql用户能访问/usr/local/mysql/var
#chgrp -R mysql /usr/local/mysql 注:设定mysql组能够访问/usr/local/mysq
8>启动mysql,进入已经安装好的目录
#cd /usr/local/mysql
#bin/mysqld_safe --user=mysql &
9>
修改mysql数据库超级用户root的缺省密码:
/usr/local/mysql/bin/mysqladmin -u root password 'mysql'
关闭mysql服务器
cd /usr/local/mysql/bin
./mysqladmin -u root -p shutdown
10>设定开机就启动mysql,进入源码目录下
# cd /home/Mysql-5.0.41
# cp support-files/mysql.server /etc/init.d/mysql
# chmod +x /etc/init.d/mysql
# chkconfig --level 345 mysql on
# service mysql restart
Shutting down MySQL. [ 确定 ]
Starting MySQL [ 确定 ]
[root@localhost mysql]#
到这里MySQL就装好了。
3、配置MySQL5.0的复制(Replication)功能
一.将master设置为只读。
mysql> flush tables with read lock;
二.用master中的data文件夹替换slave中的data文件夹
比如 用 tar zcvf mysql_data.gz /media/raid10/mysql/3306/data
然后 mv mysql_data.gz /media/raid10/htdocs/blog/wordpress/
因为我的 /media/raid10/htdocs/blog/wordpress/ 是 Nginx 的主目录
所以可以在 slave上,用wget下载这个文件,然后 解压,并覆盖slave上的data文件
注意:覆盖之前最好备份源文件
三.配置master的my.cnf,添加以下内容
在[mysqld]配置段添加如下字段
server-id=1
log-bin=/media/raid10/mysql/3306/binlog/binlog //这里写你的binlog绝对路径名
binlog-do-db=blog //需要同步的数据库,如果没有本行,即表示同步所有的数据库
binlog-ignore-db=mysql //被忽略的数据库
这里给出我的my.cnf配置文件
[client]
character-set-server = utf8
port = 3306
socket = /tmp/mysql.sock
[mysqld]
character-set-server = utf8
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-ignore-db = information_schema
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /media/raid10/mysql/3306/data
log-error = /media/raid10/mysql/3306/mysql_error.log
pid-file = /media/raid10/mysql/3306/mysql.pid
open_files_limit = 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 16M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 20M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 20M
max_heap_table_size = 20M
long_query_time = 3
log-slave-updates
log-bin = /media/raid10/mysql/3306/binlog/binlog
binlog-do-db=blog
binlog-ignore-db=mysql
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 20M
relay-log-index = /media/raid10/mysql/3306/relaylog/relaylog
relay-log-info-file = /media/raid10/mysql/3306/relaylog/relaylog
relay-log = /media/raid10/mysql/3306/relaylog/relaylog
expire_logs_days = 30
key_buffer_size = 10M
read_buffer_size = 1M
read_rnd_buffer_size = 6M
bulk_insert_buffer_size = 4M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 20M
myisam_repair_threads = 1
myisam_recover
interactive_timeout = 120
wait_timeout = 120
skip-name-resolve
#master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
#master-host = 192.168.1.2
#master-user = username
#master-password = password
#master-port = 3306
server-id = 1
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 20M
innodb_data_file_path = ibdata1:56M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 20M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
#log-slow-queries = /media/raid10/mysql/3306/slow.log
#long_query_time = 10
[mysqldump]
quick
max_allowed_packet = 32M
四.在master机上为slave机添加一同步帐号
mysql> grant replication slave on *.* to 'admin'@'172.29.141.115' identified by '12345678';
mysql> flush privileges ;
五.配置slave的my.cnf,添加以下内容
注意:
1.如果mysql是5.5.3-m3 的版本,只需
在[mysqld]字段下添加如下内容
server-id=2
2.如果是5.0x的版本,需要
在[mysqld]字段下添加如下内容
server-id=2
log-bin=mysql-bin //这是同步的binlog,具体以你的binlog为准
master-host=172.29.141.112
master-user=admin
master-password=12345678
master-port=3306
master-connect-retry=60 //如果发现主服务器断线,重新连接的时间差;
replicate-do-db=blog //同步的数据库,不写本行 表示 同步所有数据库
replicate-ignore-db=mysql //不需要备份的数据库
log-slave-update
slave-skip-errors
我的mysql是5.5.3,这里给出我的slave my.cnf配置文件
[client]
character-set-server = utf8
port = 3306
socket = /tmp/mysql.sock
[mysqld]
character-set-server = utf8
replicate-ignore-db = mysql
replicate-ignore-db = test
replicate-do-db = blog
replicate-ignore-db = information_schema
user = mysql
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/webserver/mysql
datadir = /media/raid10/mysql/3306/data
log-error = /media/raid10/mysql/3306/mysql_error.log
pid-file = /media/raid10/mysql/3306/mysql.pid
open_files_limit = 10240
back_log = 600
max_connections = 5000
max_connect_errors = 6000
table_cache = 614
external-locking = FALSE
max_allowed_packet = 16M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 300
#thread_concurrency = 8
query_cache_size = 20M
query_cache_limit = 2M
query_cache_min_res_unit = 2k
default-storage-engine = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 20M
max_heap_table_size = 20M
long_query_time = 3
log-slave-updates
log-bin = /media/raid10/mysql/3306/binlog/binlog
binlog_cache_size = 4M
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 20M
relay-log-index = /media/raid10/mysql/3306/relaylog/relaylog
relay-log-info-file = /media/raid10/mysql/3306/relaylog/relaylog
relay-log = /media/raid10/mysql/3306/relaylog/relaylog
expire_logs_days = 30
key_buffer_size = 10M
read_buffer_size = 1M
read_rnd_buffer_size = 6M
bulk_insert_buffer_size = 4M
myisam_sort_buffer_size = 8M
myisam_max_sort_file_size = 20M
myisam_repair_threads = 1
myisam_recover
interactive_timeout = 120
wait_timeout = 120
skip-name-resolve
#master-connect-retry = 60
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
#master-host=172.29.141.112
#master-user = admin
#master-password = 12345678
#master-port = 3306
server-id = 2
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 20M
innodb_data_file_path = ibdata1:56M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_log_file_size = 20M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_file_per_table = 0
#log-slow-queries = /media/raid10/mysql/3306/slow.log
#long_query_time = 10
[mysqldump]
quick
max_allowed_packet = 32M
六.通过查看master的状态(在master上查看),为配置slave做准备
mysql> show master status/G;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 13
Current database: blog
*************************** 1. row ***************************
File: binlog.000005
Position: 592
Binlog_Do_DB: blog
Binlog_Ignore_DB: mysql
1 row in set (0.01 sec)
ERROR:
No query specified
从上面的信息,可以看出,master现在使用的binlog是binlog.000005,position是592,那么下面的slave配置必须与这个对应。
其实binlog.000005是当前master使用的binlog日志文件
position是当前master使用的binlog.000005日志文件的位置
简单理解为master正在使用哪个binlog的哪个数据行(位置)。
七.如果是5.5.3-m3版本mysql,需要启动slave后,配置与master相关对应的信息(在slave上配置)
注意,这个与第六步相对应
mysql> stop slave ;
mysql> change master to master_host='172.29.141.112', master_user='admin', master_password='12345678', master_log_file='binlog.000005', master_log_pos=488;
mysql> CHANGE MASTER TO MASTER_CONNECT_RETRY=60;
这个与5.0的配置my.cnf作用是一样的,配置成与master相对应的内容
主要是配置slave,让slave知道从master的哪个binlog上的哪个位置复制数据。所以需要知道master的ip,user_name,user_passwd,binlog,binlog_position以及多长时间连接一次master
八.开启slave
mysql> start slave;
九.解除master只读限制,并做测试
mysql> unlock tables;
mysql> use blog;
mysql> create longxibendi ( a int, b int );
十.从slave上查看
mysql> use blog;
mysql> show tables;
+-----------------------+
| Tables_in_blog |
+-----------------------+
| longxibendi |
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_terms |
| wp_usermeta |
| wp_users |
+-----------------------+
12 rows in set (0.00 sec)
可以看到成功了!!
十一.配置过程中,可以用 show slave status/G; 在 slave上
查看 slave的复制情况
十二.如果出现什么问题,可能是防火墙的问题
/etc/init.d/iptables stop 关闭 master 上的防火墙,或者进行相应的配置
常遇到的错误与解决:
1.[mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
这个错误,网上有很多说法,其实直接的原因是mysql服务器没有启动
之前我按照5.0x配置master-slave,然后启动slave,在连接slave,就会报这个错误
后来发现原因是,mysql slave没有启动起来,然后去查错误日志,发现以下的字段
110505 01:55:20 mysqld_safe mysqld from pid file /media/raid10/mysql/3306/mysql.pid ended
110505 02:04:41 mysqld_safe Starting mysqld daemon with databases from /media/raid10/mysql/3306/data
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
110505 2:04:41 InnoDB: highest supported file format is Barracuda.
110505 2:04:41 InnoDB Plugin 1.0.6 started; log sequence number 44338
110505 2:04:41 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-connect-retry=60'
110505 2:04:41 [ERROR] Aborting
110505 2:04:41 InnoDB: Starting shutdown...
110505 2:04:43 InnoDB: Shutdown completed; log sequence number 44348
110505 2:04:43 [Note] /usr/local/webserver/mysql/libexec/mysqld: Shutdown complete
110505 02:04:43 mysqld_safe mysqld from pid file /media/raid10/mysql/3306/mysql.pid ended
110505 02:07:44 mysqld_safe Starting mysqld daemon with databases from /media/raid10/mysql/3306/data
InnoDB: The InnoDB memory heap is disabled
InnoDB: Mutexes and rw_locks use InnoDB's own implementation
110505 2:07:44 InnoDB: highest supported file format is Barracuda.
110505 2:07:45 InnoDB Plugin 1.0.6 started; log sequence number 44348
110505 2:07:45 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-host=172.29.141.112'
110505 2:07:45 [ERROR] Aborting
从上面的ERROR,知道 master-connect-retry=60这个my.cnf中的参数有问题,后来从网上搜资料,发现,mysql5.5.3-m3版本不支持这个参数,
然后我把这个参数注释掉,又发现不支持这个参数master-host,从上面的ERROR字段可以看出来。后来,就知道,5.5.3-m3不能按5.0.x那样配置
原来不需要从my.cnf中配置master相关信息,当然server-id是必须的。其他信息,通过 在命令行中 ,登陆 mysql服务器配置。
其实server-id的作用是
第一,标识,区分不同的slave,第二,防止环备份的发生
2.Last_Error: Last_SQL_Error:等错误
这个是从 slave上,运行 show slave status/G; 得到的。出现这个问题,最根本的原因是,slave 没有与当前的master的binlog 和binlog的position对应上
也就是说,slave传输的master binlog 不与当前master正使用的binlog以及binlog的行数对应。
3.[ERROR] Slave I/O: error connecting to master 'admin@172.29.141.112:3306' - retry-time: 60 retries: 86400, Error_code: 2003
这个就是因为防火墙的问题,所以用 /etc/init.d/iptables stop 关闭防火墙就OK了。
4.遇到ERROR 2013 (HY000): Lost connection to MySQL server during query错误。
在/ect/my.cnf的[mysqld]中添加skip-name-resolve

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











웹 응용 프로그램에서 MySQL의 주요 역할은 데이터를 저장하고 관리하는 것입니다. 1. MySQL은 사용자 정보, 제품 카탈로그, 트랜잭션 레코드 및 기타 데이터를 효율적으로 처리합니다. 2. SQL 쿼리를 통해 개발자는 데이터베이스에서 정보를 추출하여 동적 컨텐츠를 생성 할 수 있습니다. 3.mysql은 클라이언트-서버 모델을 기반으로 작동하여 허용 가능한 쿼리 속도를 보장합니다.

Laravel은 웹 응용 프로그램을 쉽게 구축하기위한 PHP 프레임 워크입니다. 설치 : Composer를 사용하여 전 세계적으로 Laravel CLI를 설치하고 프로젝트 디렉토리에서 응용 프로그램을 작성하는 등 다양한 기능을 제공합니다. 라우팅 : Routes/Web.php에서 URL과 핸들러 간의 관계를 정의하십시오. 보기 : 리소스/뷰에서보기를 작성하여 응용 프로그램의 인터페이스를 렌더링합니다. 데이터베이스 통합 : MySQL과 같은 데이터베이스와 상자 외 통합을 제공하고 마이그레이션을 사용하여 테이블을 작성하고 수정합니다. 모델 및 컨트롤러 : 모델은 데이터베이스 엔티티를 나타내고 컨트롤러는 HTTP 요청을 처리합니다.

Linux 시스템의 5 가지 기본 구성 요소는 다음과 같습니다. 1. Kernel, 2. System Library, 3. System Utilities, 4. 그래픽 사용자 인터페이스, 5. 응용 프로그램. 커널은 하드웨어 리소스를 관리하고 시스템 라이브러리는 사전 컴파일 된 기능을 제공하며 시스템 유틸리티는 시스템 관리에 사용되며 GUI는 시각적 상호 작용을 제공하며 응용 프로그램은 이러한 구성 요소를 사용하여 기능을 구현합니다.

메모장은 Java 코드를 직접 실행할 수는 없지만 다른 도구를 사용하여 명령 줄 컴파일러 (Javac)를 사용하여 Bytecode 파일 (filename.class)을 생성하면 달성 할 수 있습니다. Java Interpreter (Java)를 사용하여 바이트 코드를 해석하고 코드를 실행하고 결과를 출력하십시오.

작은 응용 프로그램을 개발할 때 까다로운 문제가 발생했습니다. 가벼운 데이터베이스 운영 라이브러리를 신속하게 통합해야합니다. 여러 라이브러리를 시도한 후에는 기능이 너무 많거나 호환되지 않는다는 것을 알았습니다. 결국, 나는 내 문제를 완벽하게 해결하는 YII2를 기반으로 단순화 된 버전 인 Minii/DB를 발견했습니다.

git 저장소 주소를 보려면 다음 단계를 수행하십시오. 1. 명령 줄을 열고 리포지토리 디렉토리로 이동하십시오. 2. "git remote -v"명령을 실행하십시오. 3. 출력 및 해당 주소에서 저장소 이름을 봅니다.

기사 요약 :이 기사는 Laravel 프레임 워크를 쉽게 설치하는 방법에 대한 독자들을 안내하기위한 자세한 단계별 지침을 제공합니다. Laravel은 웹 애플리케이션의 개발 프로세스를 가속화하는 강력한 PHP 프레임 워크입니다. 이 자습서는 시스템 요구 사항에서 데이터베이스 구성 및 라우팅 설정에 이르기까지 설치 프로세스를 다룹니다. 이러한 단계를 수행함으로써 독자들은 라벨 프로젝트를위한 탄탄한 토대를 빠르고 효율적으로 놓을 수 있습니다.

Laravel을 설치하려면 다음 단계를 순서대로 수행하십시오. Composer 설치 (MacOS/Linux 및 Windows) 설치 LARAVEL 설치 프로그램 새 프로젝트 시작 서비스 액세스 애플리케이션 (URL : http://127.0.1:8000) 데이터베이스 연결 (필요한 경우)을 설정하십시오.
