Subversion Repositories ALCASAR

Rev

Details | Last modification | View Log

Rev Author Line No. Line
2664 tom.houday 1
#!/bin/bash
2
#
3
# $Id: alcasar-migration-3.2.0_dbStructure.sh 2667 2018-12-06 21:34:28Z tom.houdayer $
4
#
5
# alcasar-migration-3.2.0_dbStructure.sh
6
# by Tom HOUDAYER
7
#
8
# This script is distributed under the Gnu General Public License (GPL)
9
#
10
# Migrate database structure to ALCASAR 3.2.0
11
# Changes:
12
# - Set database engine of radius tables to InnoDB
13
# - Set column names in lowercase in radius tables
14
# - Set index names in lowercase in radius tables
2667 tom.houday 15
# - Set RADIUS attribute length to 64 characters
2664 tom.houday 16
 
17
PASSWD_FILE="/root/ALCASAR-passwords.txt"
18
DB_PASS=$(cat $PASSWD_FILE | grep ^db_root= | cut -d'=' -f2-)
19
 
20
DRY_RUN=false
21
 
22
if [ $# -eq 1 ] && [ "$1" == "--simulation" ]; then
23
	DRY_RUN=true
24
fi
25
 
26
db_query () {
27
	if $DRY_RUN && [[ ! "$1" =~ ^'SELECT ' ]]; then
28
		echo "[SQL] request: \"$1\""
29
	else
30
		mysql -u root -p"$DB_PASS" -D radius -e "$1" -Ns
31
		[ $? -ne 0 ] && echo "[SQL] ERROR (\"$1\")"
32
	fi
33
}
34
 
35
 
36
# Set database engine of radius tables to InnoDB
37
db_res=$(db_query "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'radius' AND ENGINE != 'InnoDB';")
38
if [ -n "$db_res" ]; then
39
	while read -r tableName; do
40
		db_query "ALTER TABLE $tableName ENGINE = InnoDB;"
41
	done <<< "$db_res"
42
fi
43
 
44
# Set column names in lowercase in radius tables
45
db_res=$(db_query "SELECT COLUMN_NAME, TABLE_NAME, COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'radius' AND TABLE_NAME IN ('mtotacct', 'totacct', 'userinfo') AND BINARY COLUMN_NAME REGEXP BINARY '[A-Z]';")
46
if [ -n "$db_res" ]; then
47
	while read -r line; do
48
		columnName=$(echo "$line" | cut -f1)
49
		tableName=$(echo "$line"  | cut -f2)
50
		columnType=$(echo "$line" | cut -f3)
51
		columnNameLower=${columnName,,}
52
		db_query "ALTER TABLE $tableName CHANGE $columnName $columnNameLower $columnType;"
53
	done <<< "$db_res"
54
fi
55
 
56
# Set index names in lowercase in radius tables
2667 tom.houday 57
db_res=$(db_query "SELECT INDEX_NAME, TABLE_NAME, GROUP_CONCAT(COLUMN_NAME SEPARATOR ',') FROM ( SELECT INDEX_NAME, TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA = 'radius' AND TABLE_NAME IN ('mtotacct', 'totacct', 'userinfo') AND INDEX_NAME != 'PRIMARY' AND BINARY INDEX_NAME REGEXP BINARY '[A-Z]' ORDER BY SEQ_IN_INDEX ) AS indexes GROUP BY TABLE_NAME, INDEX_NAME;")
2664 tom.houday 58
if [ -n "$db_res" ]; then
59
	while read -r line; do
60
		indexName=$(echo "$line"    | cut -f1)
61
		tableName=$(echo "$line"    | cut -f2)
62
		indexColumns=$(echo "$line" | cut -f3)
63
		indexNameLower=${indexName,,}
64
		db_query "ALTER TABLE $tableName DROP INDEX $indexName, ADD INDEX $indexNameLower ($indexColumns);"
65
	done <<< "$db_res"
66
fi
67
 
2667 tom.houday 68
# Set RADIUS attribute length to 64 characters
2664 tom.houday 69
db_query "ALTER TABLE radacct       MODIFY COLUMN acctuniqueid varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '';"
70
db_query "ALTER TABLE radcheck      MODIFY COLUMN attribute    varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '';"
71
db_query "ALTER TABLE radreply      MODIFY COLUMN attribute    varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '';"
72
db_query "ALTER TABLE radgroupcheck MODIFY COLUMN attribute    varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '';"
73
db_query "ALTER TABLE radgroupreply MODIFY COLUMN attribute    varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '';"
74
 
75
# Fix a potential bug
76
db_query "UPDATE radreply      SET attribute = 'Alcasar-Status-Page-Must-Stay-Open' WHERE attribute = 'Alcasar-Status-Page-Must-Stay-Op';"
77
db_query "UPDATE radgroupreply SET attribute = 'Alcasar-Status-Page-Must-Stay-Open' WHERE attribute = 'Alcasar-Status-Page-Must-Stay-Op';"