Mysql优化(二)

linux里常用命令:
service mysqld start 启动mysql数据库
service iptables stop 关闭防火墙

mysql主从复制
Mysql优化(二)
服务器准备
192.168.110.177 主服务器 master
192.168.110.178 从服务器slave

修改主(master)服务器
vi /etc/my.cnf 新增以下内容
server_id=177 ###服务器id
log-bin=mysql-bin ###开启日志文件

重启服务器
service mysqld start
service iptables stop

主服务器给从服务器账号授权
//一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

登录主服务器的mysql,查询master的状态
Mysql优化(二)
如果结果为null,则主服务器my.cf没有配置好.

修改从(slave)服务器
vim /etc/my.cnf
server_id=178
log-bin=mysql-bin
binlog_do_db=test

change master to master_host='192.168.110.177',master_user='mysync',master_password='q123456',
         master_log_file='mysql-bin.000002',master_log_pos=343;

启动同步
start slave

检查从服务器复制功能状态
SHOW SLAVE STATUS
Mysql优化(二)
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES

读写分离

什么是读写分离
在数据库集群架构中,让主库负责处理事务性查询,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。当然,主数据库另外一个功能就是负责将事务性查询导致的数据变更同步到从库中,也就是写操作。
读写分离的好处
1)分摊服务器压力,提高机器的系统处理效率
读写分离适用于读远比写的场景,如果有一台服务器,当select很多时,update和delete会被这些select访问中的数据堵塞,等待select结束,并发性能并不高,而主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;
假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白了就是拿机器和带宽换性能;
2)增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务

Mycat安装

创建表结构
CREATE DATABASE IF NOT EXISTS weibo_simple;


– Table structure for t_users 用户表


DROP TABLE IF EXISTS t_users;
CREATE TABLE t_users (
user_id varchar(64) NOT NULL COMMENT ‘注册用户ID’,
user_email varchar(64) NOT NULL COMMENT ‘注册用户邮箱’,
user_password varchar(64) NOT NULL COMMENT ‘注册用户密码’,
user_nikename varchar(64) NOT NULL COMMENT ‘注册用户昵称’,
user_creatime datetime NOT NULL COMMENT ‘注册时间’,
user_status tinyint(1) NOT NULL COMMENT ‘验证状态 1:已验证 0:未验证’,
user_deleteflag tinyint(1) NOT NULL COMMENT ‘删除标记 1:已删除 0:未删除’,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


– Table structure for t_message微博表


DROP TABLE IF EXISTS t_message;
CREATE TABLE t_message (
messages_id varchar(64) NOT NULL COMMENT ‘微博ID’,
user_id varchar(64) NOT NULL COMMENT ‘发表用户’,
messages_info varchar(255) DEFAULT NULL COMMENT ‘微博内容’,
messages_time datetime DEFAULT NULL COMMENT ‘发布时间’,
messages_commentnum int(12) DEFAULT NULL COMMENT ‘评论次数’,
message_deleteflag tinyint(1) NOT NULL COMMENT ‘删除标记 1:已删除 0:未删除’,
message_viewnum int(12) DEFAULT NULL COMMENT ‘被浏览量’,
PRIMARY KEY (messages_id),
KEY user_id (user_id),
CONSTRAINT t_message_ibfk_1 FOREIGN KEY (user_id) REFERENCES t_users (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置server.xml

<!-- 添加user -->
   <user name="mycat">
    <property name="password">mycat</property>
    <property name="schemas">mycat</property>
    </user>
	
	<!-- 添加user -->
   <user name="mycat_red">
    <property name="password">mycat_red</property>
    <property name="schemas">mycat</property>
	<property name="readOnly">true</property>
    </user>

配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
    <!-- 与server.xml中user的schemas名一致 -->
    <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
        <table name="t_users" primaryKey="user_id" dataNode="dn1" rule="rule1"/>
        <table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" />
    </schema>
<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple


" />
   
    <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"
                slaveThreshold="100">
         <heartbeat>select user()</heartbeat>  
        <writeHost host="hostMaster" url="172.27.185.1:3306" user="root" password="root">
        </writeHost>
        <writeHost host="hostSlave" url="172.27.185.2:3306" user="root" password="root"/>
    </dataHost>
    
</mycat:schema>

配置rule.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/">
	 <tableRule name="rule1">
        <rule>
            <columns>user_id</columns>
            <algorithm>func1</algorithm>
        </rule>
    </tableRule>
    <function name="func1" class="org.opencloudb.route.function.AutoPartitionByLong">
  	<property name="mapFile">autopartition-long.txt</property>
    </function>
</mycat:rule>

为了更好地定位错误,修改log4j.xml

双击startup_nowrap.bat开始启动

常见问题

SHOW MASTER STATUS 如果为,则在my.ini文件中添加一行
log-bin=mysql-bin

给账号分配权限
grant all privileges on . to ‘root’@‘172.27.185.1’ identified by ‘root’;
查询服务器server_id
SHOW VARIABLES LIKE ‘server_id’