一、下载mysql二进制安装包
mysql官网:mysql安装包下载地址
1、进入mysql官网,选择下载
2、点击MySQL Community Server ,根据操作系统,选择mysql安装包
也可以选择其它版本
3、点击download,提示注册登录,只选择下载就OK了
二、安装准备
1、JDK为1.8以上:java -version
2、上传mysql安装包到直接目录
3、在同一目录下,创建目录:bin、conf、data、logs
mkdir -p logs bin conf data/{secdata,perdata,pertmp}
4、在conf下创建文本per.cnf,内容:
[mysqld]
basedir=/home/Tiger/soft/mysql/mysql-5.6.41
datadir=/home/Tiger/soft/mysql/data/perdata
port=33306
socket=/home/Tiger/soft/mysql/logs/per.sock
log_timestamps=SYSTEM
sql_mode='NO_ENGINE_SUBSTITUTION'
slave_pending_jobs_size_max=1167772160
character_set_server = utf8
innodb_buffer_pool_size=10G
#innodb_buffer_pool_instances=40
innodb_buffer_pool_instances=10
innodb_page_cleaners=20
innodb_log_buffer_size=32M
tmpdir='/tmp:/home/Tiger/soft/mysql/data/pertmp'
innodb_io_capacity=100
thread_handling="pool-of-threads"
thread_pool_size=64
innodb_online_alter_log_max_size=5368709120
thread_cache_size=1000
innodb_log_file_size = 500M
table_open_cache=10000
table_open_cache_instances=10
max_connections=400
max_connect_errors=100000
interactive_timeout=300
wait_timeout=300
performance_schema=off
#early-plugin-load=keyring_file.so
early-plugin-load=""
#keyring_file_data=/home/jfshop/mysql/Percona-Server-5.7.11-4/keyring
secure-file-priv=/home/Tiger/soft/mysql/data/secdata
#user=uac
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#for application
innodb_flush_log_at_trx_commit=2
lower_case_table_names=1
log_bin_trust_function_creators=1
event_scheduler=1
slow_query_log=1
long_query_time=3
log_output='TABLE,FILE'
innodb_read_io_threads=4
innodb_write_io_threads=4
slow_query_log_file=/home/Tiger/soft/mysql/logs/slowquery.log
expire_logs_days=7
#for log warnings
skip-host-cache
skip-name-resolve
explicit_defaults_for_timestamp
#for replication
#slave_skip_errors='1007,1008,1050,1051,1054,1060,1061,1068,1091,1146,1507,1517'
#slave_skip_errors=ddl_exist_errors
#slave_skip_errors=1062
server-id = 53
log-bin = /home/Tiger/soft/mysql/data/perdata/mysql-bin
relay-log=mysqld-relay-bin
#binlog_format=mixed
binlog_format=row
sync_binlog=100
auto-increment-increment = 1
auto-increment-offset = 1
#rpl_semi_sync_master_enabled = 1
#rpl_semi_sync_master_timeout = 1000
#rpl_semi_sync_slave_enabled = 1
slave_parallel_type=LOGICAL_CLOCK
#gtid-mode=on
#enforce-gtid-consistency=true
#skip-slave-start
sync-master-info=1
slave_parallel_workers=16
relay_log_recovery=ON
master_info_repository=TABLE
relay_log_info_repository=TABLE
[mysqld_safe]
log-error=/home/Tiger/soft/mysql/logs/percona.log
pid-file=/home/Tiger/soft/mysql/logs/percona.pid
PS:basedir、datadir、socket、tmpdir、slow_query_log_file、log-error、pid-file,这几个文件的目录一定要根据自己创建目录而定。
5、初始化mysql,basedir是mysql安装包的路径,datadir是存放数据的目录,初始化命令执行成功时,会在最后一行显示mysql root用户的初始密码,如下面字样:[Note] A temporary password is generated for root@ localhost: Bi4JnbphX0.t
bin/mysqld --initialize --basedir=/home/Tiger/soft/mysql/mysql-5.7.23 --datadir=/home/Tiger/soft/mysql/data/perdata
PS:如果初始化之后,忘记了密码,那就把data和logs目录下初始化生成的文件和目录干掉,再来一次。
6、启动mysql,查看日志
nohup bin/mysqld_safe --defaults-file=… --ledir=… > /dev/null &
defaults-file指定mysql配置文件,如/app/soft/conf/per.cnf
ledir指定mysql的bin目录
7、将mysql bin目录添加到环境变量,不然每次进入mysql都需要先进入mysql安装包的bin目录下
添加之后,需要source一下
三、进入mysql,修改密码,创建用户
bin/mysql -u root -p
1、第一次进入mysql,必须修改root用户的密码
alter user user() identified by 'Tiger';
alter user 'root'@'%' identified by 'Tiger';
上面两条sql,版本不一样,修改root密码的sql也不一样
2、创建新用户
create user 'tiger'@'%' identified by 'tiger';
3、创建新库
create database tiger_base DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
4、给新用户赋权
grant all privileges on tiger_base.* to 'tiger'@'%';
5、刷新
flush privileges;
四、安装过程中遇到的问题
1、[ERROR] bin/mysqld: unknown option '--initialize'
解决方法:5.6+版本的mysql没有这个属性,换成5.7+版本的就可以了
2、执行bin/mysql -u root -p时,找不到这个文件:/tmp/mysql.sock
解决方法:ln -s /home/Tiger/soft/mysql/logs/per.sock /tmp/mysql.sock ,创建软连接,再次执行就OK了
五、mysql其它常用sql
#2、创建唯一索引,作用和主键一样
CREATE UNIQUE INDEX 索引名 ON 表名 (字段名,字段名);
CREATE UNIQUE INDEX index_user_daily_checkin2 ON user_daily_checkin (user_id,checkin_date);
#3、创建普通索引
ALTER TABLE 表名 ADD INDEX 索引名 (user_id,info_type);
ALTER TABLE user_message ADD INDEX index_user_message (user_id,info_type);
#4、删除索引
DROP INDEX 索引名 ON 表名 ;
#5、mysql date类型的日期转字符串
SELECT COUNT(1) FROM USER WHERE DATE_FORMAT(dt_create,'%Y-%m-%d') = '2018-08-22';
#6、字符串转date类型
SELECT STR_TO_DATE('2016-01-02', '%Y-%m-%d %H') FROM DUAL;
#7、betweeen and 包含边界值,相当于>= <=
#8、获取当前时间,格式:yyyy-MM-dd
select curdate() from dual
#9、获取本月第一天
select DATE_ADD(curdate(),interval -day(curdate())+1 day) from dual;
#10、获取本月天数
SELECT DAY(LAST_DAY(CURDATE())) FROM DUAL;
#11、获取当月最后一天日期
SELECT LAST_DAY(CURDATE()) FROM DUAL;
#12、获取当前到月初的天数
SELECT DAY(CURDATE()) FROM DUAL;
#13、字符串截取,left,从左边截取几个字符
select left('wyyydhh',2) from dual;
#14、从右边截取,right
SELECT RIGHT('wyyydhh',2) FROM DUAL;
#15、字符串截取:substring(str, pos),从第几个字符开始往后全部截取,并返回
SELECT SUBSTRING('wyyyddfff',3) FROM DUAL;
#16、从字符串的第 n个字符位置开始取,只取 m个字符。
SELECT SUBSTRING('wabyddfff',3,2) FROM DUAL;
#17、从字符串的第 n个字符位置(倒数)开始取,直到结束。
SELECT SUBSTRING('wyyydhh',-2) FROM DUAL;
#18、从字符串的第 n个字符位置(倒数)开始取,只取 m个字符。
select substring('sqlstudy.com', -4, 2) from dual;
#19、如果在字符串中找不到 delim 参数指定的值,就返回整个字符串
SELECT SUBSTRING_INDEX('sqlstudy.com', '.', 1) FROM DUAL;
#20 mysql命名规范
1、数据库名:与系统名相同
2、表名:系统名称缩写+_+表名。表名必须描述该表的用途,由单个或多个名词组成,首字母小写,后续单词首字母大写。
3、字段名:字段名必须描述该字段的用途,由单个或多个名词组成,首字母小写,后续单词首字母大写。这里跟其他地方的规范不太一样。阿里规范中要求必须使用下划线的格式,主要考虑某些环境mysql不区分大小写,有些环境区分大小写。其实只要查询时区分大小写就没有问题了,但如果使用下划线的命名方式,在字段映射的时候会非常麻烦。
4、主键字段:表名+Id
5、外键字段:与主表主键字段完全一样
6、主键:pk_+表名
7、外键:fk_+从表名+_+主表名
8、视图:view_+名名称
9、存储过程:prcd_+名称
10、函数:fun_+名称
11、触发器:trg_+名称
12、索引:idx_+名称
#21、查看mysql的版本号
SHOW VARIABLES WHERE Variable_name = 'version';