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 的部署。
专注WEB编程开发技术
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 的部署。
为了演示部署过程,我通过 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
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。
上述内容来自互联网
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入门简单、编写快速,优势相对大一点。至于后端例如行为分析、银行接口、异步消息处理等,等真正需要时,就要根据不同业务需求来选择不同语言了。
使用索引,可以优化含有ORDER BY的MySQL语句,下文就将为您详细介绍这种优化MySQL语句的方法,希望对您学习MySQL语句优化方面有所帮助。
关于建立索引的几个准则:
1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。
2、索引越多,更新数据的速度越慢。
3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。
4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。
5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。
简朝阳认为,对于排序的优化,最有效的办法就是借助索引的帮助,让索引的有序特性自动带给你有序的数据,这在 MySQL 中是非常常见的优化方式,屡试不爽。当然,对于其他数据库如 Oracle 等也同样奏效。
以前数据库的性能瓶颈大多时候都出现在 IO 层面,现在经常也遇到 CPU 成为瓶颈的时候,而且并不是在使用高性能IO设备如SSD之类的场景下。对于 CPU 成为瓶颈的数据库优化,目前遇到的场景大多是排序和重复读取过多造成。
在 Linux 下安装 MySQL 5.1 时,默认不会安装 InnoDB 引擎,需要以插件的形式进行安装。
登录到 MySQL 命令行,执行如下命令安装 InnoDB 引擎:
mysql>INSTALL PLUGIN InnoDB SONAME ‘ha_innodb.so’;
安装成功后,可以使用如下命令查询 InnoDB 引擎是否已被安装:
mysql>show engines;
最近站长的笔记本刚刚换上了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的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/