Rumah pangkalan data tutorial mysql linux系统下实现mysql热备份详细步骤(mysql主从复制)_MySQL

linux系统下实现mysql热备份详细步骤(mysql主从复制)_MySQL

Jun 01, 2016 pm 01:25 PM
linux mysql pangkalan data pelayan

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

bitsCN.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Peranan MySQL: Pangkalan Data dalam Aplikasi Web Peranan MySQL: Pangkalan Data dalam Aplikasi Web Apr 17, 2025 am 12:23 AM

Peranan utama MySQL dalam aplikasi web adalah untuk menyimpan dan mengurus data. 1.MYSQL dengan cekap memproses maklumat pengguna, katalog produk, rekod urus niaga dan data lain. 2. Melalui pertanyaan SQL, pemaju boleh mengekstrak maklumat dari pangkalan data untuk menghasilkan kandungan dinamik. 3.MYSQL berfungsi berdasarkan model klien-pelayan untuk memastikan kelajuan pertanyaan yang boleh diterima.

Contoh Pengenalan Laravel Contoh Pengenalan Laravel Apr 18, 2025 pm 12:45 PM

Laravel adalah rangka kerja PHP untuk membina aplikasi web yang mudah. Ia menyediakan pelbagai ciri yang kuat termasuk: Pemasangan: Pasang Laravel CLI secara global dengan komposer dan buat aplikasi dalam direktori projek. Routing: Tentukan hubungan antara URL dan pengendali dalam laluan/web.php. Lihat: Buat pandangan dalam sumber/pandangan untuk menjadikan antara muka aplikasi. Integrasi Pangkalan Data: Menyediakan integrasi keluar-of-the-box dengan pangkalan data seperti MySQL dan menggunakan penghijrahan untuk membuat dan mengubah suai jadual. Model dan Pengawal: Model mewakili entiti pangkalan data dan proses pengawal permintaan HTTP.

Apr 16, 2025 pm 07:39 PM

Walaupun Notepad tidak dapat menjalankan kod Java secara langsung, ia dapat dicapai dengan menggunakan alat lain: menggunakan pengkompil baris arahan (Javac) untuk menghasilkan fail bytecode (fileName.class). Gunakan Java Interpreter (Java) untuk mentafsir bytecode, laksanakan kod, dan output hasilnya.

Seni Bina Linux: Melancarkan 5 Komponen Asas Seni Bina Linux: Melancarkan 5 Komponen Asas Apr 20, 2025 am 12:04 AM

Lima komponen asas sistem Linux adalah: 1. Kernel, 2. Perpustakaan Sistem, 3. Utiliti Sistem, 4. Antara Muka Pengguna Grafik, 5. Aplikasi. Kernel menguruskan sumber perkakasan, Perpustakaan Sistem menyediakan fungsi yang telah dikompilasi, utiliti sistem digunakan untuk pengurusan sistem, GUI menyediakan interaksi visual, dan aplikasi menggunakan komponen ini untuk melaksanakan fungsi.

Selesaikan masalah sambungan pangkalan data: Kes praktikal menggunakan perpustakaan mini/db Selesaikan masalah sambungan pangkalan data: Kes praktikal menggunakan perpustakaan mini/db Apr 18, 2025 am 07:09 AM

Saya menghadapi masalah yang rumit ketika membangunkan aplikasi kecil: keperluan untuk mengintegrasikan perpustakaan operasi pangkalan data ringan dengan cepat. Selepas mencuba beberapa perpustakaan, saya mendapati bahawa mereka mempunyai terlalu banyak fungsi atau tidak serasi. Akhirnya, saya dapati Minii/DB, versi mudah berdasarkan YII2 yang menyelesaikan masalah saya dengan sempurna.

Cara memeriksa alamat gudang git Cara memeriksa alamat gudang git Apr 17, 2025 pm 01:54 PM

Untuk melihat alamat repositori Git, lakukan langkah -langkah berikut: 1. Buka baris arahan dan navigasi ke direktori repositori; 2. Jalankan perintah "Git Remote -V"; 3. Lihat nama repositori dalam output dan alamat yang sepadan.

Kaedah pemasangan kerangka Laravel Kaedah pemasangan kerangka Laravel Apr 18, 2025 pm 12:54 PM

Ringkasan Artikel: Artikel ini menyediakan arahan langkah demi langkah terperinci untuk membimbing pembaca tentang cara memasang rangka kerja Laravel dengan mudah. Laravel adalah rangka kerja PHP yang kuat yang mempercepat proses pembangunan aplikasi web. Tutorial ini merangkumi proses pemasangan dari keperluan sistem untuk mengkonfigurasi pangkalan data dan menyediakan penghalaan. Dengan mengikuti langkah -langkah ini, pembaca dapat dengan cepat dan cekap meletakkan asas yang kukuh untuk projek Laravel mereka.

Kod pemasangan Laravel Kod pemasangan Laravel Apr 18, 2025 pm 12:30 PM

Untuk memasang Laravel, ikuti langkah -langkah berikut dalam urutan: Pasang komposer (untuk macOS/linux dan windows) Pasang pemasang Laravel Buat aplikasi akses perkhidmatan permulaan projek baru (URL: http://127.0.0.1:8000) Sediakan sambungan pangkalan data (jika diperlukan)

See all articles