Linux环境中MySQL主从同步--添加新的从库

当前我认为数据库主从有两大应用价值:

1.从库相当于主库的备份。虽然数据库的主从并不能代替/取代备份,例如错误的数据可能毁掉所有的数据库,但主从也是在一种可读的状态下保持备份的一种实现方式。

2.从库可以缓解主库的压力,能提高性能。由于从库是只读的,因此在读取查询方面,从库可以代替主库,承担一定的压力,无论是这些压力是来自用户(应用程序)还是开发、运维自己。

MySQL的主从其实并不困难,而且需要做的事情也并不多,mysql官方给出的文档中对主从也做出了详细的指导、说明和解释,但总共也多少篇幅。鉴于很多网友已经详细叙写了相关的文档或文章,此处就能不赘述了(也可以略微参考本文的最后一部分“数据库主从的配置过程中使用的一些命令和步骤”)。

简单说几句关于添加新的从库的小技巧。

因为添加从库时,需要知道MASTER_LOG_FILE和MASTER_LOG_POS,虽然通过在master主库上执行“show master status”能看到当前的MASTER_LOG_FILE和MASTER_LOG_POS,但实际上这种方法只能用于master主库刚开始用的情况下,即数据库刚建好,没有任何数据写入的情况下,或者能将这些数据先手动同步到从库中去。

一种较为方便的方法就是,通过mysqldump导出主库的数据库,同时导出事件、触发器、函数和视图,以及master-data,这样通过查看mysqldump导出的文件的前几行就能找到MASTER_LOG_FILE和MASTER_LOG_POS,这时在将从主库导出的sql语句在从库执行以后,就可以通过这一个MASTER_LOG_FILE和MASTER_LOG_POS,配置好从库,并开始同步。

关于mysqldump的详细说明以及MySQL数据库的的备份脚本可以参考文章《Linux Shell脚本之利用mysqldump备份MySQL数据库(详细注解)》以及文章中的评论。

通过mysqldump导出主库的数据库,同时导出事件、触发器、函数和视图,以及master-data:

/usr/local/mysql/bin/mysqldump -uusername -hipaddress  -ppassword -Pport --routines --events --triggers --single-transaction --flush-logs --master-data=1 –databases databasename

如果想单独导出事件、触发器、函数和视图等而不导出数据,则可以执行:

/usr/local/mysql/bin/mysqldump -uusername -hipaddress  -ppassword -Pport --routines --events --triggers --no-create-info --no-data --no-create-db

此外将一个数据库主从的配置过程中使用的一些命令和步骤陈列如下,以作参考或备忘:

# Sat Aug 22 11:23:03 CST 2015
# Get mysql 5.5.38 for production use
# https://downloads.mariadb.com/archive/index/p/mysql/v/5.5.38
# https://downloads.mariadb.com/archives/mysql-5.5/mysql-5.5.38.tar.gz
wget -c https://downloads.mariadb.com/archives/mysql-5.5/mysql-5.5.38-linux2.6-x86_64.tar.gz

# Remove some conflicts
rpm -e mysql-server mysql
userdel mysql
rm -rf /usr/local/mysql/
rm -f /etc/my.cnf

#  Set user and group
groupadd -r -g 27 mysql 
useradd -r -u 27 -g mysql mysql -c "MySQL Server" -d /dev/null -s /sbin/nologin

groupadd -r mysql 
useradd -r -g mysql mysql -c "MySQL Server" -d /dev/null -s /sbin/nologin

# Install  MySQL database 
tar zxf mysql-5.5.38-linux2.6-x86_64.tar.gz
cp -r mysql-5.5.38-linux2.6-x86_64 /usr/local/mysql
# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --explicit_defaults_for_timestamp --skip-name-resolve
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data/mysql/data --user=mysql --skip-name-resolve

# Run it temporarily 
# /usr/local/mysql/bin/mysqld_safe &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

# Set mysql commands 
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin
ln -s /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump
ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config

# set mysql root password, etc
/usr/local/mysql/bin/mysql_secure_installation

# Set mysql library 
ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.18.0.0
ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so.18
ln -s /usr/local/mysql/lib/libmysqlclient.so.18.0.0 /usr/lib64/libmysqlclient.so
ls -l /usr/lib64/libmysqlclient.so.18.0.0
ls -l /usr/lib64/libmysqlclient.so.18
ls -l /usr/lib64/libmysqlclient.so
vim /etc/ld.so.conf.d/mysql-x86_64.conf 
    /usr/lib64/mysql 
    /usr/local/mysql/lib
ldconfig

# Set mysql replication 
# master db
cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
sed -i "[email protected]\t= [email protected]       = [email protected]" /etc/my.cnf
sed -i "[email protected]#[email protected][email protected]" /etc/my.cnf
sed -i "[email protected]#[email protected][email protected]" /etc/my.cnf
# slave db
cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf
sed -i "[email protected]\t= 1[email protected]       = [email protected]" /etc/my.cnf

# read errors from logs
cat /usr/local/mysql/data/`hostname`.err

# Some reference
# server-id = 101
# log-bin=/usr/local/mysql/data/bin-log
# max_binlog_size = 1500M
# binlog_cache_size = 128K
# binlog-do-db = devdbops
# binlog-ignore-db = mysql
# log-slave-updates
# expire_logs_day=2
# binlog_format=mixed

# end mysql temporarily
kill -TERM `ps -ef | awk ‘/mysqld_safe/ && ! /awk/ {print $2}‘` || kill -KILL `ps -ef | awk ‘/mysqld_safe/ && ! /awk/ {print $2}‘`
ps -ef | awk ‘/mysqld_safe/ && ! /awk/ {print $2}‘
kill -TERM `ps -ef | awk ‘/mysqld/ && ! /awk/ {print $2}‘` || kill -KILL `ps -ef | awk ‘/mysqld/ && ! /awk/ {print $2}‘`
ps -ef | awk ‘/mysqld/ && ! /awk/ {print $2}‘

# Setting sysvinit 
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql

# Start mysql database
service mysql start
service mysql status

# some operation about replicaion
# master db
GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "root";
FLUSH PRIVILEGES;
CREATE USER ‘dev‘@‘%‘ IDENTIFIED BY ‘dev‘;
CREATE DATABASE IF NOT EXISTS devdbops;
GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EXECUTE,INDEX,INSERT,LOCK TABLES,SELECT,UPDATE,SHOW VIEW ON devdbops.* TO ‘dev‘@"%";
USE devdbops;
CREATE TABLE `testtable` (
`id`  int NOT NULL ,
`name`  varchar(255) NULL ,
`value`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
PRIMARY KEY (`id`)
)
;
INSERT INTO `testtable` (`id`, `name`, `value`) VALUES (‘0‘, ‘a‘, ‘b‘);
# CREATE USER ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘;
# GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘%.mydomain.com‘;
# CREATE USER ‘repl‘@‘%‘ IDENTIFIED BY ‘slavepass‘;
# GRANT REPLICATION SLAVE ON devdbops.* to ‘replication‘@‘%‘;
SHOW MASTER STATUS;
SHOW PROCESSLIST \G;
SHOW SLAVE HOSTS;
QUIT;

# slave db
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST=‘192.168.1.101‘,MASTER_USER=‘root‘,MASTER_PASSWORD=‘root‘,MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=107;
START SLAVE;
SHOW SLAVE STATUS \G;

# Read for test

tag:mysql主从配置,mysql添加从库,mysql备份视图函数,mysql备份脚本,Linux安装mysql

--end--

时间: 2024-08-02 12:57:08

Linux环境中MySQL主从同步--添加新的从库的相关文章

linux中mysql主从同步

主服务器:10.236.51.151 从服务器:10.236.51.152 安装mysql yum -y install mysql-devel mysql-server 运行安全设置向导 mysql_secure_installation 主服务器 cp /usr/share/mysql/my-large.cnf /etc/my.cnf    (my-large是一个注释了很多配置的文件) 修改master端的/etc/my.cnf文件 server_id = 1 (为1表示master,2表

Linux 下实现Mysql主从同步

一.实验环境准备: 主库(Master):CentOS release 5.9  x86_64 IP:10.45.172.40 mysql Ver 14.12 Distrib 5.0.95 从库CentOS release 5.9  x86_64 IP:10.45.172.37 mysql Ver 14.12 Distrib 5.0.95, 测试是否安装mysql:service mysql restart  或servicemysqld restart 安装mysql安装: 在官方网站下载以下

MySQL - 主从结构.添加新 Slave

复制从库主要步骤: ==================== 可以看到,从主库复制会有段时间锁表,这段时间会影响主库的使用.如果我们能直接从从库进行复制,就不会对主库产生影响了.但是,从从库复制要保证的是复制过程中从库上的数据不会发生变化,所以要先停掉从库. 1.停止从库: mysql> stop slave; 2.看当前从库的状态.和前面的看主库状态一样.但现在是从从库复制,所以查看从库状态:mysql> show slave status; 记下 Relay_Master_Log_file

centos 5.4中mysql主从同步配置方法

安装环境•centos 5.4•mysql 5.1.xx 采用rpm直接安装•xtrabackup 1.2.22 采用rpm直接安装1. Master:/etc/my.cnf  代码如下 复制代码 [mysqld]server-id = 1log-bininnodb_flush_log_at_trx_commit=1sync_binlog=1datadir=/var/lib/mysql character-set-server=utf8init_connect='SET NAMES utf8'

MySQL主从同步添加至zabbix监控

参考文档:https://blog.csdn.net/hellowidow_2020/article/details/78985368    https://www.cnblogs.com/cdjiangchao/p/3844329.html 创建用于监控的用户 grant replication client on *.* to 'zabbix'@'localhost' identified by 'zabbix'; 添加监控脚本/nas/scripts/mysql_check.sh #!/b

部署mysql主从同步

部署mysql主从同步一.什么是mysql主从同步主:正在被客户端访问的数据库服务器,被称作主库服务器.从:自动同步主库上的数据的数据库服务器,被称作从库服务器. 二.配置mysql主从同步2.1 拓扑图数据库服务器 192.168.4.51 做主库数据库服务器 192.168.4.52 做从库 2.2 环境准备主从同步未配置之前,要保证从库上要有主库上的数据.禁用selinux ]# setenforce 0 关闭防火墙服务]# systemctl stop firewalld物理连接正常 ]

MySQL主从同步--原理及实现(一)

1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover(失败切换)/High Availability 数据备份. 3.主从同步的原理是什么? 首先我们来了解master-slave的体系结构. 如下图: 不管是delete.update.insert,还是创建函数.存储过程,所有的操作都在master上.当master有操作的时候,slave会快速的

mysql主从同步中应注意的问题

MYSQL主从同步的作用 (1) 数据分布(2) 负载平衡(load balancing)(3) 备份(4) 高可用性(high availability)和容错 MYSQL主从同步的原理 关于MYSQL的主从同步,最主要的是要了解MYSQL的主从同步是如何工作的也即主从同步的原理,通过下图能很明白的指导其工作的过程: 大致描述一下过程:从服务器的IO线程从主服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在从上执行中继日志中的内容,从而使从库和主库保持一致.主从同步的详细过程

mysql主从同步中出现的问题梳理

之前部署了Mysql主从复制环境(MySQL复制环境(主从/主主)部署总结性梳理),在mysql同步过程中会出现很多问题,导致数据同步异常.以下梳理了几种主从同步中可能存在的问题:1)slave运行过慢不能与master同步,也就是MySQL数据库主从同步延迟MySQL数据库slave服务器延迟的现象是非常普遍的,MySQL复制允许从机进行SELECT操作,但是在实际线上环境下,由于从机延迟的关系,很难将读取操作转向到从机.这就导致了有了以下一些潜规则:"实时性要求不高的读取操作可以放到slav