(?)企业部分之MySQl

(1)MySQL数据的复制

MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务器,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

(2)MySQL数据复制的原理

MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。

每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

认识到二进制日志只是一个从启用二进制日志的固定时间点开始的记录非常重要。任何设置的从服务器需要主服务器上的在主服务器上启用二进制日志时的数据库拷贝。如果启动从服务器时,其数据库与主服务器上的启动二进制日志时的状态不相同,从服务器很可能失败。

MySQL数据库的复制需要启动三个线程来实现:

其中1个在主服务器上,另两个在从服务器上。当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。主服务器创建一个线程将二进制日志中的内容发送到从服务器。该线程可以识别为主服务器上SHOW PROCESSLIST的输出中的Binlog Dump线程。从服务器I/O线程读取主服务器Binlog Dump线程发送的内容并将该数据拷贝到从服务器数据目录中的本地文件中,即中继日志。第3个线程是SQL线程,是从服务器创建用于读取中继日志并执行日志中包含的更新。

在前面的描述中,每个从服务器有3个线程。有多个从服务器的主服务器创建为每个当前连接的从服务器创建一个线程;每个从服务器有自己的I/O和SQL线程。

这样读取和执行语句被分成两个独立的任务。如果语句执行较慢则语句读取任务没有慢下来。例如,如果从服务器有一段时间没有运行了,当从服务器启动时,其I/O线程可以很快地从主服务器索取所有二进制日志内容,即使SQL线程远远滞后。如果从服务器在SQL线程执行完所有索取的语句前停止,I/O 线程至少已经索取了所有内容,以便语句的安全拷贝保存到本地从服务器的中继日志中,供从服务器下次启动时执行。这样允许清空主服务器上的二进制日志,因为不再需要等候从服务器来索取其内容。

(3)可能存在的问题

延迟问题——新版本的MySQl大致可以解决该问题;更改模型,可以减少延迟

复制过程中出错的问题——采用半同步可避免

HA集群切换导致的问题——可用lock master 解决

##Linux自带的MySQl##

1. MySQl的主从复制(A→B)

防火墙关闭,SELnux Disabled

【server1】

yum install -y mysql-server
/etc/init.d/mysqld start
mysql_secure_installation
vim /etc/my.cnf

在[mysqld]最后添加以下内容:

server-id=1

log-bin=mysql-bin    ##默认不打开二进制日志

/etc/init.d/mysqld restart
cd /var/lib/mysql/
mysqlbinlog mysql-bin.000001    ##二进制日志

mysql -p
mysql> grant replication slave on *.* to [email protected]‘172.25.45.2‘ identified by ‘westos‘;
mysql> show master status;
mysql> show databases;
mysql> quit

mysqlbinlog mysql-bin.000001

【server2】

yum install -y mysql-server
mysql -h 172.25.45.1 -uwjl -p
vim /etc/my.cnf

在[mysqld]最后添加一行:server-id=2

/etc/init.d/mysqld start
mysql_secure_installation
mysql -p
mysql> show slave status;
mysql> change master to master_host=‘172.25.45.1‘,master_user=‘wjl‘,master_password=‘westos‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=255;
mysql> start slave;
mysql> show slave status;
mysql> show slave status\G;
mysql> show databases;
mysql> quit

测试:

【server1】

mysql -p
mysql> create database westos;
mysql> use westos;
mysql> create table usertb ( username varchar(25) not null, password varchar(25) not null);
mysql> show tables;
mysql> insert into usertb value (‘user1‘,‘123‘);
mysql> insert into usertb value (‘user2‘,‘456‘);
mysql> delete from usertb where username=‘user2‘;
mysql> update usertb set passwd=passwd(‘456‘);    ##边做边看server2是否同步

【server2】

mysqlbinlog mysql-bin.000001
mysql -p
mysql> show databases;
mysql> use westos;
mysql> show tables;
mysql> desc usertb;
mysql> select * from usertb;
cd /var/lib/mysql/
cat relay-log.info    ##判断不同并记录
cat master.info

2.主从复制应用(A→B→C)

【server2】

vim /etc/my.cnf

添加以下内容:

log-bin=mysql-bin

log-slave-updates

/etc/init.d/mysqld restart
ls /var/lib/mysql

mysql -p
mysql> show master status;
mysql> grant replication slave on *.* to [email protected]‘172.25.45.3‘ identified by ‘westos‘;
mysql> show databases;
mysql> quit

【server3】

yum install -y mysql-server
mysql -h 172.25.45.2 -uwjl -p
vim /etc/my.cnf

在[mysqld]最后添加一行:server-id=3

/etc/init.d/mysqld start
mysql_secure_installation
mysql -p
mysql> show slave status;
mysql> change master to master_host=‘172.25.45.2‘,master_user=‘wjl‘,master_password=‘westos‘,master_log_file=‘mysql-bin.000001‘,master_log_pos=255;
mysql> start slave;
mysql> show slave status\G;
mysql> show databases;
mysql> quit

【server1】

scp mysql-bin.000001  [email protected]:/var/lib/mysql/

【server3】

mysql -p
mysql> show databases;
mysql> quit
mysqlbinlog  mysql-bin.000001 --start-position=255 --stop-position=490 | mysql -pwestos    ##执行server2上执行的操作

##mysql5.7版本##

1.

【server1/server2】

rm -rf /var/lib/mysql/*
rpm -qa | grep mysql
yum remove mysql mysql-server 
rpm -e mysql-libs --nodeps/  rpm -e `rpm -qa | grep mysql` --nodeps
rpm -qa | grep mysql    ##卸载干净,不然和新版本会有冲突

需要软件包:

mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar

【server1】

tar -xf mysql-5.7.11-1.el6.x86_64.rpm-bundle.tar
scp mysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-common-5.7.11-1.el6.x86_64.rpm mysql-community-server-5.7.11-1.el6.x86_64.rpm mysql-community-libs-5.7.11-1.el6.x86_64.rpm [email protected]:
yum install -y mysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-common-5.7.11-1.el6.x86_64.rpm mysql-community-server-5.7.11-1.el6.x86_64.rpm mysql-community-libs-5.7.11-1.el6.x86_64.rpm
/etc/init.d/mysqld start
cat /var/log/mysqld.log | grep password

mysql_secure_installation    ##新版本对密码的要求更高
vim /etc/my.cnf

在最后添加以下内容:

server-id=1

log-bin=mysql-bin

/etc/init.d/mysqld restart
mysql -p
mysql> grant replication slave on *.* to [email protected]‘172.25.45.2‘ identified by ‘Westos+123‘;
mysql> show master status;
mysql> quit

【server2】

yum install -y mysql-community-client-5.7.11-1.el6.x86_64.rpm mysql-community-common-5.7.11-1.el6.x86_64.rpm mysql-community-server-5.7.11-1.el6.x86_64.rpm mysql-community-libs-5.7.11-1.el6.x86_64.rpm
mysql -h 172.25.45.1 -uwjl -pWestos+123    ##可成功登录
vim /etc/my.cnf

在最后添加一行:server-id=2

/etc/init.d/mysqld start
cat /var/log/mysqld.log | grep password

/etc/init.d/mysqld start
mysql_secure_installation
mysql -p
mysql> start slave;
mysql> show slave status\G;
mysql> show databases;
mysql> quit

测试:

【server1】

mysql -p
mysql> create database westos;
mysql> use westos;
mysql> create table usertb ( username varchar(25) not null, password varchar(25) not null);
mysql> show tables;
mysql> insert into usertb value (‘user1‘,‘123‘);
mysql> insert into usertb value (‘user2‘,‘456‘);
mysql> delete from usertb where username=‘user2‘;
mysql> update usertb set passwd=passwd(‘456‘);##边做边看server2是否同步

【server2】

mysqlbinlog mysql-bin.000001
mysql -p
mysql> show databases;
mysql> use westos;
mysql> show tables;
mysql> desc usertb;
mysql> select * from usertb;

2.

【server2】

mysql -p
mysql> stop slave;
mysql> quit

【server1/server2】

vim /etc/my.cnf

在最后添上以下内容:

gtid-mode=on

enforce-gtid-consistency=on

/etc/init.d/mysqld restart

【server2】

mysql -p
mysql> show slave status\G;##slave依然开启
mysql> stop slave;
mysql> change master to master_host=‘172.25.45.1‘,master_user=‘wjl‘,master_password=‘Westos+123‘,master_auto_position=1;
mysql> start slave;
mysql> show slave status\G;

测试:

【server1】

mysql -p
mysql> create database westos;
mysql> use westos;
mysql> create table usertb ( username varchar(25) not null, password varchar(25) not null);
mysql> show tables;
mysql> insert into usertb value (‘user1‘,‘123‘);
mysql> insert into usertb value (‘user2‘,‘456‘);
mysql> delete from usertb where username=‘user2‘;
mysql> update usertb set passwd=passwd(‘456‘);    ##边做边看server2是否同步

【server2】

mysqlbinlog mysql-bin.000001
mysql -p
mysql> show databases;
mysql> use westos;
mysql> show tables;
mysql> desc usertb;
mysql> select * from usertb;

对应且增加

3.

【server2】

vim /etc/my.cnf

在最后添上以下内容:

slave-parallel-type=LOGICAL_CLOCK

slave-parallel-workers=16

master_info_repository=TABLE

relay_log_info_repository=TABLE

relay_log_recovery=ON

/etc/init.d/mysqld restart
mysql -p
mysql> show slave status\G;

4.

【server1】

需要一个sql文件——add.sql

mysql -p
mysql> use westos;
mysql> drop table usertb;
mysql> show processlist;
mysql> quit
mysql -pWestos+123 westos < add.sql
mysql -p
mysql> use westos;
mysql> call test1;

可通过mysql> show slave status\G在server2查看进度

扩大server2内存空间

pvcreate /dev/vdb1
vgextend VolGroup /dev/vdb1
lvextend -L +10g /dev/VolGroup/lv_root
resize2fs /dev/VolGroup/lv_root
time mysqldump -pWestos+123 westos > westos.sql
time mysqlpump -pWestos+123 --default-parallelism=2 --compress-output=lz4 westos > test
时间: 2024-12-14 18:44:19

(?)企业部分之MySQl的相关文章

(二)企业部分之mysql源码安装

所需软件包:mysql-boost-5.7.11.tar.gz,cmake-2.8.12.2-4.el6.x86_64.rpm tar zxf mysql-boost-5.7.11.tar.gz yum install cmake -y yum update cmake-2.8.12.2-4.el6.x86_64.rpm yum install gcc gcc-c++ ncurses-devel bison -y    ##解决依赖性 cmake -DCMAKE_INSTALL_PREFIX=/

(四)企业部分之PHP(未完)

1.PHP安装 软件包:php-5.6.19.tar.bz2 re2c-0.13.5-1.el6.x86_64.rpm gd-devel-2.0.35-11.el6.x86_64.rpm tar jxf php-5.6.19.tar.bz2 yum install curl-devel re2c-0.13.5-1.el6.x86_64.rpm gd-devel-2.0.35-11.el6.x86_64.rpm gmp-devel net-snmp-devel libxml2-devel -y c

(十)企业部分之cacti

所需软件包:cacti-0.8.8h.tar.gz cacti-spine-0.8.8h.tar.gz php-snmp-5.3.3-26.el6.x86_64.rpm yum install httpd tar zxf cacti-0.8.8h.tar.gz -C /var/www/html/ cd /var/www/html/ ln -s cacti-0.8.8h/ cacti yum install -y php php-mysql mysql-server php-server php-

(?)企业部分之corosync【未完缺图】

需要一个纯净的虚拟机,需要重新编译内核:为了提高编译速度,4CPU,2048内存. 内核源码   linux-2.6.32-220.23.1.el6.x86_64 使用dvd.repo做yum源 所需软件包:kernel-2.6.32-220.23.1.el6.src.rpm  Lvs-fullnat-synproxy.tar.gz 解决依赖性:asciidoc-8.4.5-4.1.el6.noarch.rpm newt-devel-0.52.11-3.el6.x86_64.rpm slang-

(?)企业部分之HA集群(2)【未完】

[server3] /etc/init.d/luci start https://server3.example.com:8084 将apache服务禁用, Run Exclusive 取消,避免apache服务独占 [server1/server2] yum install mysql-server -y /etc/init.d/mysqld start https://server3.example.com:8084 增加一个 Failover Domains 增加一个Resource --

(?)企业部分之redis

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询. Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU ev

(三)企业部分之nginx(未完)

1.nginx安装 所需软件包:nginx-1.8.0.tar.gz tar zxf nginx-1.8.0.tar.gz cd nginx-1.8.0 yum install pcre-devel  openssl-devel  -y ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module make make install vim /root/.bash_

(?)企业部分之nagios(未完)

##nagios安装## ##可参考官网文档 1.tar jxf nagios-cn-3.2.3.tar.bz2 cd nagios-cn-3.2.3 yum install gd-devel-2.0.35-11.el6.x86_64.rpm -y groudadd nagcmd useradd -M -d /usr/local/nagious -G nagcmd nagios usermod -G nagcmd apache ./configure --with-command-group=n

(?)企业部分之ganglia(未完)

昨天的 开启禁用的服务 6.11 server3开启服务--nagios  httpd server4 server3 下载包 ganglia-web-3.4.2.tar.gz libconfuse-2.6-3.el6.x86_64.rpm libconfuse-devel-2.6-3.el6.x86_64.rpm rrdtool-devel-1.3.8-6.el6.x86_64.rpm ganglia-3.4.0.tar.gz yum install -y rpm-build rumbuild