MySQL| 安装配置| 主从复制
1. Mysql的安装配置
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
官网下载地址:http://dev.mysql.com/downloads/mysql/
拷贝&解压缩
1、CentOS6
rpm -qa|grep mysql
如果存在mysql-libs的旧版本包如下:
请先执行卸载命令:rpm -e --nodeps mysql-libs
2、CentOS7
rpm -qa|grep mariadb
如果存在如下:
请先执行卸载命令:rpm -e --nodeps mariadb-libs
检查/tmp文件夹权限
由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限
执行 :chmod -R 777 /tmp
[root@kris ~]# cd /
[root@kris /]# ll
可以看到
drwxrwxrwt. 27 root root 4096 1月 11 08:26 tmp
在mysql的安装文件目录下执行:
rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
在把它拖到opt目录下安装
[root@kris /]# cd /opt
查看MySQL安装版本
可以执行 mysqladmin --version命令,类似java -version如果打出消息,即为成功。
通过vim 查看 mysql用户和mysql组
在mysql首次登录前要给 root 账号设置密码
[root@kris opt]# cd
[root@kris ~]# service mysql start
启动服务后,执行命令
[root@kris ~]# mysqladmin -u root password '123456'
然后通过 mysql -uroot -p123123进行登录
[root@kris ~]# mysql -uroot -p123456
在linux下查看安装目录 ps -ef | grep mysql
自启动mysql服务器,
修改字符集
1 查看字符集
show variables like 'character%';
show variables like '%char%';
看看出现的结果:
默认的服务器用了latin1,所以会乱码。
2 修改my-huge.cnf
在/usr/share/mysql/ 中找到my-huge.cnf的配置文件,
拷贝其中的my-huge.cnf 到 /etc/ 并命名为my.cnf (cp my-huge.cnf /etc/my.cnf)
然后修改my.cnf:
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8
3、重新启动mysql
service mysql restart
查看原库的字符集:show create database mydb
但是原库的设定不会发生变化,参数修改之对新建的数据库生效
4、已生成的库表字符集如何变更
修改数据库的字符集
mysql> alter database mydb character set 'utf8';
修改数据表的字符集
mysql> alter table mytbl convert to character set 'utf8';
但是原有的数据如果是用非'utf8'编码的话,数据本身不会发生改变。
通过工具远程访问
1、先 ping 一下数据库服务器的ip 地址确认网络畅通。
2、关闭数据库服务的防火墙
service iptables stop
3、 确认Mysql中已经有可以通过远程登录的账户
select * from mysql.user where user='root' and host='%';
如果没有用户,先执行如下命令:
grant all privileges on *.* to root@'%' identified by '123123';
4、测试连接:
Mysql的一些杂项配置
MySQL的sql_mode合理设置
sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开
发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。
mysql> SHOW VARIABLES LIKE 'sql_mode'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | sql_mode | | +---------------+-------+ 1 row in set (0.00 sec)
sql_mode常用值如下:
set sql_mode='ONLY_FULL_GROUP_BY';
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
7种join
MySQL主从复制
复制的基本原理
slave会从master读取binlog来进行数据同步;
① master将改变记录到二进制日志(binary log),这些记录过程叫做二进制日志事件,binary log events;
② slave将master的binary log events拷贝到它的中继日志(relay log);
③slave重做中继日志中的事件,将改变应用到自己的数据库中。
MySQL复制是异步的且串行化的。
复制的基本原则
每个slave只有一个master;每个slave只能有一个唯一的服务器ID;每个master可以有多个salve;
复制的最大问题---延迟
一主一从复制的配置
mysql版本一致且后台以服务运行;主从都配置在[mysqld]结点下,都是小写;
一、主机修改my.ini配置文件:
①主服务器唯一ID ②启动二进制日志 ③设置不要复制的数据库 ④设置需要复制的数据库 ⑤设置logbin格式 [mysqld] # The TCP/IP Port the MySQL Server will listen on port=3306 server-id=1 #主数据库端ID号 log-bin=F:/MySQLData/MySQLServer5.5/data/mysqlbin #开启二进制日志 binlog-ignore-db=mysql #设置不要复制的数据库 binlog-do-db=mydb2 #设置需要复制的数据库 binlog_format=STATEMENT #设置logbin格式,默认的
mysql主从复制起始时,从机不继承主机数据;
二、从机配置文件修改my.cnf的[mysqld]栏位下;
[root@kris ~]# cd /etc [root@kris etc]# vim my.cnf server-id = 2 #注意my.cnf 中有server-id = 1,把它修改了即可,与主服务的server-id不能一样。 relay-log=mysql-relay
因修改过配置文件,请主机+从机都重启后台mysql服务;主机从机都关闭防火墙
三、在Windows主机上建立帐户并授权slave:
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.1.100' IDENTIFIED BY '123456'; #授权账号
查询master的状态--->>
SHOW MASTER STATUS;
-->> 记录下File和Position的值,执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。
四、在Linux从机上配置需要复制的主机:
CHANGE MASTER TO MASTER_HOST='192.168.43.179',MASTER_USER='slave',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysqlbin.000001',MASTER_LOG_POS=107; #注意这里是数字,不加单引号;登陆的账号是主服务授权的账号和密码 START SLAVE; SHOW SLAVE STATUS; mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.43.179 Master_User: slave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqlbin.000004 Read_Master_Log_Pos: 645 Relay_Log_File: mysql-relay.000002 Relay_Log_Pos: 790 Relay_Master_Log_File: mysqlbin.000004 Slave_IO_Running: Yes #两个都为yes表示主从配置成功! Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: ...... 1 row in set (0.00 sec) stop slave; 停止从服务复制功能
五、主机新建库、新建表、insert记录,从机复制;测试。
CREATE DATABASE mydb2; USE mydb2; CREATE TABLE users ( uid INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) NOT NULL, email VARCHAR(200)); INSERT INTO users (username, email) VALUES ('kris', 'kris@qq.com'), ('smile','smile@123.com');