部署 Keepalived 实现 MySQL 双主高可用架构

1.部署 MySQL 双主(Master – Master)集群

参考我的博文:《MySQL 双主 Master to Master 架构部署方法》

地址:http://www.sunbloger.com/2018/08/16/604.html

假设已经在 IP 为 192.168.0.1 和 192.168.0.2 的两台主机上部署好了 MySQL 双主集群,接下来我们进行 Keepalived 的部署。

阅读更多

MySQL 双主 Master to Master 架构部署方法

为了演示部署过程,我通过 VMware 创建了两台主机,分别为 TestServer1(192.168.0.1) 和 TestServer2(192.168.0.2)。两台主机均安装了 CentOS 6.9。

MySQL 通过源码进行编译,我选择的是 mysql-5.6.41.tar.gz 这个版本的源码包。

编译安装过程如下:

创建 MySQL 的用户组和用户

# groupadd mysql
# useradd -g mysql mysql

阅读更多

MySQL获取自增主键ID的四种方法

1. SELECT MAX(id) FROM tablename

2. LAST_INSERT_ID() 函数

LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。

在多用户交替插入数据的情况下MAX(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update 操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表。

3. SELECT @@IDENTITY;

@@identity 是表示的是最近一次向具有identity属性(即自增列)的表插入数据时对应的自增列的值,是系统定义的全局变量。一般系统定义的全局变量都是以@@开头,用户自定义变量以@开头。

比如有个表A,它的自增列是id,当向A表插入一行数据后,如果插入数据后自增列的值自动增加至101,则通过select @@identity得到的值就是101。使用@@identity的前提是在进行insert操作后,执行select @@identity的时候连接没有关闭,否则得到的将是NULL值。

4. SHOW TABLE STATUS;

得出的结果里边对应表名记录中有个Auto_increment字段,里边有下一个自增ID的数值就是当前该表的最大自增ID。

上述内容来自互联网

MySQL主从(Master-Slave)同步快速部署

Master:192.168.1.1
Slave:192.168.1.2

Master端:

vi /etc/my.cnf

server-id = 1  #master端ID号
binlog-ignore-db = mysql  #不同步mysql库
binlog-ignore-db = test  #同上
binlog-ignore-db = information_schema  #同上

/usr/local/mysql/bin/mysql -uroot -p
mysql>grant replication slave on *.* to slave@’192.168.1.2′ identified by ‘123456’;
mysql>flush privileges;
mysql>flush tables with read lock;  #只读锁表
mysql>show master status;  #获取并记录下当前日志file和position的值,稍后Slave端需要用到
File             | Position  |
+——————+———-
| mysql-bin.000001 | 291392712

另开一个终端窗口,然后执行如下的操作:

tar zcvf /usr/local/mysql/var.tgz /usr/local/mysql/var  //将var目录打包
scp /usr/local/mysql/var.tgz root@192.168.1.2:/usr/local/mysql/var.tgz  //将文件包传至Slave端

完成后回到前一个终端窗口解锁只读。

mysql>unlock tables;

Slave端:

vi /etc/my.cnf
server-id = 2  #Slave的ID号,此处不能与到Master端的ID重复。
保存退出。

service mysqld stop 或 /usr/local/mysql/bin/mysqladmin -uroot -p shutdown

tar zxvf /usr/local/mysql/var.tgz /usr/local/mysql/var

chown -R mysql:mysql /usr/local/mysql/var

service mysqld start

/usr/local/mysql/bin/mysql -uroot -p

mysql>stop slave;

mysql>change master to
>master_host=’192.168.1.1′,
>master_user=’slave’,
>master_password=’123456′,
>master_log_file=’mysql-bin.000001′,    此前记录下的Master端file值
>master_log_pos=291392712;    此前记录下的Master端position值

mysql>start slave;

mysql>show slave status \G

查看上面命令返回的结果,如果Slave_IO_Running: Yes 和Slave_SQL_Running: Yes  2个均为yes,则证明主从同步正常,如果任一个显示NO,则证明同步有问题。

百万级访问量网站的技术准备工作摘录

一、开发语言

一般来说,技术人员(程序员)都是根据自己技术背景选择自己最熟悉的语言,不过不可能永远是一个人写程序,所以在语言的选择上还要是要费些心思。首先明确一点,无论用什么语言,最终代码质量是看管理,因此我们从前期开发成本分析。现在国内流行的适用于网站的语言,大概有java、php、.net、python、ruby这五大阵营。python和ruby因为在国内流行的比较晚,现在人员还是相对难招一些。.net平台的人相对多,但是到后期需要解决性能问题时,对人员技能的要求比较高。剩余的java、php用人可以说是最多的。java和php无法从语言层面做比较,但对于初期,应用几乎都是靠前端支撑的网站来说,php入门简单、编写快速,优势相对大一点。至于后端例如行为分析、银行接口、异步消息处理等,等真正需要时,就要根据不同业务需求来选择不同语言了。

阅读更多

通过索引优化MySQL语句的实现方法(转载)

使用索引,可以优化含有ORDER BY的MySQL语句,下文就将为您详细介绍这种优化MySQL语句的方法,希望对您学习MySQL语句优化方面有所帮助。

关于建立索引的几个准则:

1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。

2、索引越多,更新数据的速度越慢。

3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。

4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。

5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。

阅读更多

简朝阳:MySQL性能调优最佳实践经验(转载)

简朝阳认为,对于排序的优化,最有效的办法就是借助索引的帮助,让索引的有序特性自动带给你有序的数据,这在 MySQL 中是非常常见的优化方式,屡试不爽。当然,对于其他数据库如 Oracle 等也同样奏效。

以前数据库的性能瓶颈大多时候都出现在 IO 层面,现在经常也遇到 CPU 成为瓶颈的时候,而且并不是在使用高性能IO设备如SSD之类的场景下。对于 CPU 成为瓶颈的数据库优化,目前遇到的场景大多是排序和重复读取过多造成。

阅读更多

为MySQL 5.1加装InnoDB引擎

在 Linux 下安装 MySQL 5.1 时,默认不会安装 InnoDB 引擎,需要以插件的形式进行安装。

登录到 MySQL 命令行,执行如下命令安装 InnoDB 引擎:

mysql>INSTALL PLUGIN InnoDB SONAME ‘ha_innodb.so’;

安装成功后,可以使用如下命令查询 InnoDB 引擎是否已被安装:

mysql>show engines;

Fedora16通过yum源安装MySQL的正确方法

最近站长的笔记本刚刚换上了Fedora 16,通过yum安装MySQL时遇到了些问题,搜索了几个国内的网站,几乎都不对路,最后还是在国外的网站上找到了正确的方法,下面分享一下。

1.首先,通过yum源安装MySQL

yum install mysql mysql-server

2.启动MySQL,并设置MySQL随系统启动

systemctl start mysqld.service

systemctl enable mysqld.service

需要注意的是上面所有操作应以root身份执行。

Linux系统中自动备份MySQL数据库的Shell脚本

下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行。在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩。需要注意的是,这段脚本仅适用数据一致性要求不高的环境。

#!/bin/bash
mysql_pwd="password"
mysql_dump="/usr/local/mysql/bin/mysqldump"
cur_year=$(date +"%Y")
cur_month=$(date +"%m")
cur_day=$(date +"%d")
dump_path="/usr/backup/mysql/$cur_year-$cur_month/$cur_day"
arr_tables=(
"table_1"
"table_2"
"table_3"
)
if [ ! -d "$dump_path" ]; then
mkdir -p "$dump_path"
fi
for cur_table in ${arr_tables[*]}; do
$mysql_dump -uroot -p$mysql_pwd --opt mydb $cur_table | gzip > $dump_path/$cur_table.sql.gz
done

阳光部落原创,更多内容请访问 http://www.sunbloger.com/