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';"
|