Quick answer
mucho = a lot, much, many — neutral quantity.
demasiado = too much, too many, too + adjective — always more than is good.
Both agree with the noun (muchos libros, demasiadas horas) but stay invariable before an adjective or after a verb.
Side by side
Memory trick
Only use demasiado when you would complain about it in English. Otherwise mucho — and remember muy before adjectives.
Typical mistakes
Me gusta demasiado este restaurante.
Me gusta mucho este restaurante.
You mean a lot, not excessively. Demasiado here says the liking is a problem.
Es mucho caro.
Es muy caro.
Before an adjective Spanish needs muy. Mucho only modifies nouns and verbs.
Check yourself
Fill in: "No puedo salir, tengo ___ tarea."